ASP.Net 核心 MVC 中间件 - 从辅助文件请求中获取目标 URL
ASP.Net Core MVC Middleware - Get Target URL From Secondary File Requests
我正在尝试使用自定义中间件来拦截和修改对某个控制器 (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
我希望能够拦截和修改所有这些相关请求,而我目前的方法只捕获第一个请求。我能找到的最接近的问题是这个 但提供的扩展方法仍然没有显示用户输入的 URL 或他们点击的 link ......只有当前正在检索的文件。 HttpContext 中是否有任何 属性 会向我显示索引视图引用的脚本、图像、样式表和其他资产的 "parent request"?
编辑:我可以设置一个断点并查看正在调用的中间件,我可以看到 /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);
}
Is there any property in the HttpContext that will show me the "parent request" for the scripts, images, stylesheets, and other assets referenced by the Index view?
尝试 "Referer" 请求 header:
public async Task Invoke(HttpContext context)
{
var path = context.Request.Path;
var referer = context.Request.Headers["Referer"];
Console.WriteLine($"Referer: {referer} Path: {path}");
await _next(context);
}
例如,如果我从 /Bar
页面导航到 /Foo
页面,那么我会看到以下输出:
Referer: https://localhost:5001/Bar Path: /Foo
Referer: https://localhost:5001/Foo Path: /css/site.css
第二行表示 /Foo
是 /css/site.css
文件的 "parent request"。
我正在尝试使用自定义中间件来拦截和修改对某个控制器 (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
我希望能够拦截和修改所有这些相关请求,而我目前的方法只捕获第一个请求。我能找到的最接近的问题是这个
编辑:我可以设置一个断点并查看正在调用的中间件,我可以看到 /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);
}
Is there any property in the HttpContext that will show me the "parent request" for the scripts, images, stylesheets, and other assets referenced by the Index view?
尝试 "Referer" 请求 header:
public async Task Invoke(HttpContext context)
{
var path = context.Request.Path;
var referer = context.Request.Headers["Referer"];
Console.WriteLine($"Referer: {referer} Path: {path}");
await _next(context);
}
例如,如果我从 /Bar
页面导航到 /Foo
页面,那么我会看到以下输出:
Referer: https://localhost:5001/Bar Path: /Foo
Referer: https://localhost:5001/Foo Path: /css/site.css
第二行表示 /Foo
是 /css/site.css
文件的 "parent request"。