asp.net - net6 Web 应用程序中的默认 URL
问题描述
我正在将一个 net core 2.1 web 应用程序移植到 net 6,并遇到了应用程序的根 url 的问题。在 2.1 中,我在 launchSettings.json 中设置了根 url,例如
"iisExpress": {
"applicationUrl": "http://localhost:5001/toolbox",
"sslPort": 0
}
在引发错误的 net 6 中(applicationUrl 中不能有“/toolbox”),并且我被指示在 program.cs 中使用 app.UseBasePath,因此
var app = builder.Build();
app.UsePathBase("/toolbox");
这样可行。我可以在 localhost:5001/toolbox 上点击我的应用程序。
但我也可以在 localhost:5001 上点击它。有没有办法限制访问,使应用程序只响应 localhost:5001/toolbox ?
解决方案
根据这个github 讨论UsePathBase
不应该限制根路径的使用。如果你想这样做,你可以这样做:
public class RestrictingUsePathBaseMiddleware
{
private readonly PathString pathBase;
private readonly UsePathBaseMiddleware usePathBaseMiddleware;
public RestrictingUsePathBaseMiddleware(RequestDelegate next, PathString pathBase)
{
this.pathBase = pathBase;
usePathBaseMiddleware =new UsePathBaseMiddleware(next, pathBase);
}
public Task Invoke(HttpContext context)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (context.Request.Path.StartsWithSegments(pathBase, out var matchedPath, out var remainingPath))
{
return usePathBaseMiddleware.Invoke(context);
}
context.Response.StatusCode = StatusCodes.Status404NotFound; // do what is appropriate with the Response
return Task.CompletedTask;
}
}
public static class RestrictingUsePathBaseExtensions
{
public static IApplicationBuilder UseRestrictingPathBase(this IApplicationBuilder app, PathString pathBase)
{
if (app == null)
{
throw new ArgumentNullException(nameof(app));
}
pathBase = pathBase.Value?.TrimEnd('/');
if (!pathBase.HasValue)
{
return app;
}
return app.UseMiddleware<RestrictingUsePathBaseMiddleware>(pathBase);
}
}
并更改app.UsePathBase("/api");
为app.UseRestrictingPathBase("/api");
(注意在它之前注册的所有中间件仍然会成功运行)。
推荐阅读
- regex - 我在通过管道连接到正则表达式的 bash 脚本中使用 perl。如何在管道流中设置变量?
- c++ - Why doesn't the 'i' increment up through every iteration of the loop? (C++)
- reactjs - 为什么我的 Netlify 托管的 Gatsby 站点 301 重定向到没有域的路径?
- excel - 评估与文本的连接
- javascript - vuejs:我想在某些情况下禁用 beforeRouteLeave。或者我只想在特定情况下激活
- java - 使用抽象类时找不到符号
- python-3.x - PYTHON rumps 程序在子进程调用另一个脚本后停止响应
- angular - 在一个库中包含 SCSS 文件并在另一个库中使用它
- ffmpeg - 在 Wear OS 设备的原始视频上运行的 ffmpeg 的错误输出
- html - 文本背景不受文本大小和居中影响