Code: Select all
public class RequestResponseLoggingMiddleware : IFunctionsWorkerMiddleware
{
private readonly ILogger logger;
public RequestResponseLoggingMiddleware(ILogger logger)
{
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
var request = await context.GetHttpRequestDataAsync();
string requestBody = await new StreamReader(request!.Body).ReadToEndAsync();
logger.LogInformation("RequestBody: {requestBody}", requestBody);
await next(context);
var response = context.GetHttpResponseData();
string responseBody = await new StreamReader(response!.Body).ReadToEndAsync();
logger.LogInformation("ResponseBody: {responseBody}", responseBody);
}
}
, hier ist der Code, der den Code ersetzt, das Antwortstrom mit meinem eigenen Speicher, der mit meinem eigenen Speicher -Stream mit My Own My Own ersetzt wird. Benutzer/Anrufer:
Code: Select all
public class RequestResponseLoggingMiddleware : IFunctionsWorkerMiddleware
{
private readonly ILogger logger;
public RequestResponseLoggingMiddleware(ILogger logger)
{
this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
var request = await context.GetHttpRequestDataAsync();
string requestBody = await new StreamReader(request!.Body).ReadToEndAsync();
logger.LogInformation("RequestBody: {requestBody}", requestBody);
using (MemoryStream openResponseBody = new MemoryStream())
{
var httpContext = context.GetHttpContext();
httpContext!.Response.Body = openResponseBody;
await next(context);
var response = context.GetHttpResponseData();
string responseBody = await GetResponseBody(response!.Body);
logger.LogInformation("ResponseBody: {responseBody}", responseBody);
}
}
private async Task GetResponseBody(Stream responseBody)
{
responseBody.Seek(0, SeekOrigin.Begin);
return await new StreamReader(responseBody).ReadToEndAsync();
}
}