我有一个中间件来记录Web api请求。以下是Configuration
中的Startup.cs
方法。如果app.UseMiddleware
在app.UseMvc
之前,则没有任何Web api调用被调用。但是,如果app.UseMiddleware
在app.UseMvc
之后,则中间件不执行任何操作(即记录请求)。
我提供了以下代码。为什么app.UseMiddleware
会干扰asp.UseMvc
?
public void Configure(IApplicationBuilder app,IHostingEnvironment env,IServiceProvider services)
{
// global cors policy
app.UseCors(x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseStaticfiles();
app.UseSpaStaticfiles();
app.UseMiddleware<ApiLoggingMiddleware>();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",template: "{controller}/{action=Index}/{id?}");
});
}
下面是中间件:
public async Task Invoke(HttpContext httpContext,IApiLogService apiLogService)
{
try
{
_apiLogService = apiLogService;
var request = httpContext.Request;
if (request.Path.StartsWithSegments(new PathString("/api")))
{
var stopWatch = Stopwatch.StartNew();
var requestTime = DateTime.UtcNow;
var requestBodyContent = await ReadRequestBody(request);
var originalBodyStream = httpContext.Response.Body;
await SafeLog(requestTime,stopWatch.ElapsedMilliseconds,200,//response.StatusCode,request.Method,request.Path,request.QueryString.ToString(),requestBodyContent
);
}
else
{
await _next(httpContext);
}
}
catch (Exception ex)
{
await _next(httpContext);
}
}