gpt4 book ai didi

c# - ASP.Net Core MVC 中间件——从二级文件请求中获取目标 URL

转载 作者:行者123 更新时间:2023-11-30 21:33:03 26 4
gpt4 key购买 nike

我正在尝试使用自定义中间件来拦截和修改对某个 Controller (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 中是否有任何属性会向我显示索引 View 引用的脚本、图像、样式表和其他 Assets 的“父请求”?

编辑:我可以设置一个断点并查看正在调用的中间件,我可以看到/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"请求头:

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 文件的“父请求”。

关于c# - ASP.Net Core MVC 中间件——从二级文件请求中获取目标 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793327/

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