繁体   English   中英

如何忽略 ASP.NET 5 Web API 中的网站图标调用

[英]How to ignore favicon call in ASP.NET 5 Web API

我在 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 在浏览器中启动时,我从网络选项卡中注意到浏览器正在自动发出 favicon 请求,令人困惑的是即使我的项目中没有 favicon,favicon 请求也会成功。

截屏: 网络选项卡屏幕打印

这是项目 repo的链接。

浏览器是否会默认进行 favicon 调用? 或者有一个选项可以忽略 favicon 调用? 忽略时,调用将由浏览器进行,我们需要忽略代码中的请求吗? 或者我们可以阻止 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");
});

根据需要,网站图标请求现在将失败:

浏览器网络调试器的屏幕截图,显示 / 的状态 200 和 favicon.ico 的状态 404

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM