修复IIS部署问题:

1. LoggingMiddleware修复:处理已关闭的Stream,防止ObjectDisposedException
2. Startup.cs添加UseStaticFiles中间件:支持静态文件访问
main
821644@qq.com 3 weeks ago
parent 9c86b39757
commit e13a77fe30

@ -25,6 +25,7 @@ namespace Haoliang.Api.Middleware
public async Task Invoke(HttpContext context) public async Task Invoke(HttpContext context)
{ {
var originalBodyStream = context.Response.Body; var originalBodyStream = context.Response.Body;
MemoryStream? responseBody = null;
try try
{ {
@ -32,16 +33,17 @@ namespace Haoliang.Api.Middleware
await LogRequestAsync(context); await LogRequestAsync(context);
// Capture response // Capture response
using (var responseBody = new MemoryStream()) responseBody = new MemoryStream();
{ context.Response.Body = responseBody;
context.Response.Body = responseBody;
await _next(context); await _next(context);
// Log response // Log response
await LogResponseAsync(context, responseBody); await LogResponseAsync(context, responseBody);
// Copy the response body to the original stream // Copy the response body to the original stream
if (context.Response.ContentLength > 0)
{
responseBody.Seek(0, SeekOrigin.Begin); responseBody.Seek(0, SeekOrigin.Begin);
await responseBody.CopyToAsync(originalBodyStream); await responseBody.CopyToAsync(originalBodyStream);
} }
@ -51,6 +53,14 @@ namespace Haoliang.Api.Middleware
await _loggingService.LogErrorAsync($"Unhandled exception in logging middleware: {ex.Message}", ex); await _loggingService.LogErrorAsync($"Unhandled exception in logging middleware: {ex.Message}", ex);
throw; throw;
} }
finally
{
if (responseBody != null)
{
await responseBody.DisposeAsync();
}
context.Response.Body = originalBodyStream;
}
} }
private async Task LogRequestAsync(HttpContext context) private async Task LogRequestAsync(HttpContext context)

@ -66,6 +66,7 @@ namespace Haoliang.Api
} }
// 中间件顺序很重要 // 中间件顺序很重要
app.UseStaticFiles();
app.UseMiddleware<LoggingMiddleware>(); app.UseMiddleware<LoggingMiddleware>();
app.UseCors("AllowAll"); app.UseCors("AllowAll");
app.UseMiddleware<ExceptionMiddleware>(); app.UseMiddleware<ExceptionMiddleware>();

Loading…
Cancel
Save