gpt4 book ai didi

c# - 如何忽略 ASP.NET 5 Web API 中的图标调用

转载 作者:行者123 更新时间:2023-12-04 07:48:30 25 4
gpt4 key购买 nike

我正在练习 ASP.NET Core 5 中的中间件。所以我创建了一个新的 Web API 项目并删除了除 Startup.csProgram.cs 之外的所有文件。我还删除了 ConfigureServices 中的所有服务注册,并删除了 Configure 方法中的所有中间件。

我在 Configure 方法中添加了一个简单的内联 Run 中间件,如下所示。

app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello from Run Middleware");
});

当我运行和调试时,我注意到上面的中间件被调用了两次。后来我发现第二个调用是针对 favicon 的。当 Web API 在浏览器中启动时,我从网络选项卡中注意到浏览器正在自动发出收藏夹请求,令人困惑的是即使我的项目中没有收藏夹图标,收藏夹请求也会成功。

截图: Network tab screen print

这是 project repo 的链接.

浏览器是否会默认调用网站图标?或者有一个选项可以忽略图标调用?说到忽略,浏览器会调用,我们需要在代码中忽略请求?或者我们可以阻止 favicon 调用自身?

最佳答案

大多数浏览器默认在用户访问新网站时请求网站图标。

没有安全的方法来阻止这个服务器端;你可以添加一个

<link rel="icon" href="https://some/random/path">

标签告诉浏览器去别处寻找,但即使这样也不能保证有效。此外,您还需要提供完整的 HTML 文档。

请求成功,因为您没有在 app.Run 函数中处理这种情况 - 它只是返回“Hello from Run Middleware”,至于任何其他可能的请求路径。

请注意,您实际上并不需要关心该请求:只要您向应用添加更多逻辑(例如, Controller 路由),所有对不存在文件的调用都会自动返回 404。


但是,如果您想明确阻止 favicon 请求到达您的 app.Run 逻辑,您可以添加一个中间件来检测路径并丢弃请求:

app.Use(async (context, next) =>
{
if(context.Request.Path.Value == "/favicon.ico")
{
// Favicon request, return 404
context.Response.StatusCode = StatusCodes.Status404NotFound;
return;
}

// No favicon, call next middleware
await next.Invoke();
});

app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello from Run Middleware");
});

根据需要,favicon 请求现在将失败:

Screenshot of browser network debugger, showing status 200 for / and status 404 for favicon.ico

关于c# - 如何忽略 ASP.NET 5 Web API 中的图标调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67090158/

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