gpt4 book ai didi

http - 使用中间件仅处理 Controller 请求

转载 作者:可可西里 更新时间:2023-11-01 17:05:57 24 4
gpt4 key购买 nike

我有简单的asp核心中间件

using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;

namespace Web.Identity
{
public class UserContextHttpMiddleware
{
private readonly RequestDelegate _next;

public UserContextHttpMiddleware(RequestDelegate next)
{
_next = next;
}

public Task Invoke(HttpContext context)
{
Trace.WriteLine(context.Request.Path);

return _next(context);
}
}
}

刷新页面后我在输出中有这个

/
/assets/images/avatar-2.jpg
/assets/images/avatar-3.jpg
/assets/images/avatar-6.jpg
/assets/images/avatar-5.jpg
/assets/images/avatar-7.jpg
/assets/images/avatar-8.jpg
/assets/images/avatar-4.jpg
/assets/images/avatar-1.jpg
/images/user-background.png
/assets/images/avatar-10.jpg
/assets/images/avatar-9.jpg

第一行是对 Controller 的请求。其他行是对静态内容的请求。那么,我怎样才能只过滤将由 Controller 处理的请求而忽略对静态内容的请求呢?如何知道当前请求是对 Controller 的请求?

最佳答案

中间件按照它们注册的顺序执行(app.UseXxx 调用,参见 docs )。

因此,如果您在 MVC 中间件之前注册您的中间件,它应该只记录这些。请注意,它也会记录不存在的路由。

app.UseMiddleware<UserContextHttpMiddleware>();
app.UseMvc();

或者,您可以将中间件注册到操作中,这有点复杂(请参阅 Using middleware in the filter pipeline 文档)。

public class UserContextHttpPipeline
{
public Configure(IApplicationBuilder app)
{
app.UseMiddleware<UserContextHttpMiddleware>();
}
}

然后注册为全局过滤器

services.AddMvc(options =>
{
options.Filters.Add(new MiddlewareFilter(typeof(UserContextHttpMiddleware2)));
});

这会将中间件注册到每个操作,并将在 Mvc 中间件之后调用。这还应该确保只记录有效的操作,而不记录无效的路由。

关于http - 使用中间件仅处理 Controller 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com