@@ -90,9 +90,29 @@ private void UpdateProxyResponse(ProxyRequestArgs ev, GenericErrorResponse error
90
90
headers . Add ( new HttpHeader ( "Retry-After" , retryAfterInSeconds . ToString ( ) ) ) ;
91
91
}
92
92
93
- string body = error . Body is null ? string . Empty : JsonSerializer . Serialize ( error . Body ) ;
94
- _logger ? . LogRequest ( new [ ] { $ "{ error . StatusCode } { ( ( HttpStatusCode ) error . StatusCode ) . ToString ( ) } " } , MessageType . Chaos , new LoggingContext ( ev . Session ) ) ;
95
- session . GenericResponse ( body ?? string . Empty , ( HttpStatusCode ) error . StatusCode , headers ) ;
93
+ var statusCode = ( HttpStatusCode ) error . StatusCode ;
94
+ var body = error . Body is null ? string . Empty : JsonSerializer . Serialize ( error . Body ) ;
95
+ // we get a JSON string so need to start with the opening quote
96
+ if ( body . StartsWith ( "\" @" ) ) {
97
+ // we've got a mock body starting with @-token which means we're sending
98
+ // a response from a file on disk
99
+ // if we can read the file, we can immediately send the response and
100
+ // skip the rest of the logic in this method
101
+ // remove the surrounding quotes and the @-token
102
+ var filePath = Path . Combine ( Directory . GetCurrentDirectory ( ) , body . Trim ( '"' ) . Substring ( 1 ) ) ;
103
+ if ( ! File . Exists ( filePath ) ) {
104
+ _logger ? . LogError ( $ "File { filePath } not found. Serving file path in the mock response") ;
105
+ session . GenericResponse ( body , statusCode , headers ) ;
106
+ }
107
+ else {
108
+ var bodyBytes = File . ReadAllBytes ( filePath ) ;
109
+ session . GenericResponse ( bodyBytes , statusCode , headers ) ;
110
+ }
111
+ }
112
+ else {
113
+ session . GenericResponse ( body , statusCode , headers ) ;
114
+ }
115
+ _logger ? . LogRequest ( new [ ] { $ "{ error . StatusCode } { statusCode . ToString ( ) } " } , MessageType . Chaos , new LoggingContext ( ev . Session ) ) ;
96
116
}
97
117
98
118
private string BuildThrottleKey ( Request r ) => $ "{ r . Method } -{ r . Url } ";
0 commit comments