[英]ASP.Net Web API Swashbuckle how to ignore HttpRequestMessage
[英]How to ignore favicon call in ASP.NET 5 Web API
我在 ASP.NET Core 5 中练习中间件。所以我创建了一个新的 web API 项目并删除了除Startup.cs和Program.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");
});
根据需要,网站图标请求现在将失败:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.