【问题标题】:How to ignore favicon call in ASP.NET 5 Web API如何忽略 ASP.NET 5 Web API 中的 favicon 调用
【发布时间】:2021-07-09 09:50:14
【问题描述】:

我在 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 请求也会成功。

截图:

这是project repo的链接。

浏览器会默认调用 favicon 吗?或者有一个选项可以忽略 favicon 调用?忽略时,调用将由浏览器进行,我们需要忽略代码中的请求吗?或者我们可以阻止 favicon 调用本身?

【问题讨论】:

  • 你可以查看这个帖子,似乎我们无法阻止这个:link

标签: c# asp.net-core asp.net-core-webapi asp.net-core-middleware


【解决方案1】:

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

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

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

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

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

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


但是,如果您想明确阻止网站图标请求到达您的 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");
});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多