fin*_*s10 5 c# asp.net-core asp.net-core-middleware asp.net-core-webapi
我正在 ASP.NET Core 5 中练习中间件。因此,我创建了一个新的 Web API 项目,并删除了除Startup.cs和Program.cs之外的所有文件。我还删除了方法中的所有服务注册ConfigureServices并删除了所有中间件Configure。
我在方法中添加了一个简单的内联Run中间件,Configure如下所示。
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello from Run Middleware");
});
Run Code Online (Sandbox Code Playgroud)
当我运行和调试时,我注意到上面的中间件被调用了两次。后来我发现第二个电话是为了favicon. 当在浏览器中启动 Web API 时,我从网络选项卡中注意到浏览器正在自动发出 favicon 请求,令人困惑的是,即使我的项目中没有 favicon,favicon 请求也会成功。
这是项目存储库的链接。
浏览器默认会调用 favicon 吗?或者有一个选项可以忽略图标调用?说到忽略,浏览器会调用,我们需要在代码中忽略该请求吗?或者我们可以阻止图标调用本身?
大多数浏览器默认在用户访问新网站时请求网站图标。
没有安全的方法来阻止服务器端的这种情况;你可以添加一个
<link rel="icon" href="https://some/random/path">
Run Code Online (Sandbox Code Playgroud)
标签告诉浏览器去别处寻找,但即使这样也不能保证有效。您还需要提供完整的 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");
});
Run Code Online (Sandbox Code Playgroud)
根据需要,网站图标请求现在将失败:
| 归档时间: |
|
| 查看次数: |
1959 次 |
| 最近记录: |