我试图使用自定义中间件拦截和修改对某个控制器(FooController)的请求,同时让其他请求像往常一样通过。我想用
context.Request.Path
如图所示:
public async Task Invoke(HttpContext context)
{
if (context.Request.Path.Value.StartsWith("/Foo", StringComparison.OrdinalIgnoreCase))
{
// do stuff
}
...
}
问题是导航到
https://localhost/Foo/Index
创建多个实际请求:
/Foo/Index
/js/foo-script.js
/images/my-image.png
我希望能够拦截和修改所有这些相关的请求,而我当前的方法只捕获第一个请求。我能找到的最接近的问题是
Current URL in ASPCore Middleware?
但是提供的扩展方法仍然没有显示用户键入的URL或他们单击的链接。。。只有当前正在检索的文件。HttpContext中是否有任何属性将向我显示索引视图引用的脚本、图像、样式表和其他资产的“父请求”?
编辑:我可以设置一个断点并查看正在调用的中间件,我可以看到/Foo/Index与if语句匹配,而/js/Foo-script.js不匹配,所以这部分看起来很好。中间件在startup.cs中注册如下:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMyMiddleware();
...
}
使用以下扩展方法作为帮助程序(此部分按预期工作):
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder builder)
{
return builder.Use(next => new FooMiddleware(next).Invoke);
}