.NET Core中用户访问login.aspx路径时如何重定向到登录页
.NET Core 迁移场景下旧路径login.aspx跳转到新登录页实现
直接在请求管道里加路径判断逻辑即可,以下是两个生产环境常用的实现方案,按需选择:
方案1:轻量中间件实现(单路径跳转首选,无额外依赖)
打开项目中的Program.cs,在app.UseRouting()之后、路由映射配置(app.MapRazorPages()/app.MapControllerRoute())之前插入如下代码:app.Use(async (context, next) => { // 忽略大小写匹配旧的login.aspx请求路径 if (context.Request.Path.Equals("/login.aspx", StringComparison.OrdinalIgnoreCase)) { // 第二个参数传true为301永久重定向,需要临时跳转改成false即可 // 你已经把login.cshtml设为默认页,直接跳根路径/就会命中登录页 context.Response.Redirect("/", permanent: true); return; } await next(); });该写法会自动保留原请求的查询参数,比如旧地址
login.aspx?returnUrl=/home会自动跳转到/?returnUrl=/home,不需要单独处理登录回跳参数。方案2:URL重写规则实现(适合后续有批量aspx路径迁移需求的场景)
如果后续还有多个旧Web Forms的aspx路径需要做跳转,用框架自带的重写模块统一管理维护成本更低:- 先在服务注册段添加重写服务:
builder.Services.AddRewriter(); - 在请求管道的
app.UseRouting()之前添加重定向规则:
规则里的var rewriteOptions = new RewriteOptions() .AddRedirect("(?i)login.aspx", "/", StatusCodes.Status301MovedPermanently); app.UseRewriter(rewriteOptions);(?i)是正则忽略大小写的写法,可以匹配用户输入的Login.aspx、LOGIN.ASPX等各种大小写变体。
- 先在服务注册段添加重写服务:
避坑提醒:不要直接把跳转目标写成
/login.cshtml,.NET Core默认禁止直接访问cshtml物理文件,会直接返回404,必须跳转到对应的路由路径。你已经把登录页设为应用默认页的前提下,跳站点根路径/是最稳妥的,不会因为后续路由规则调整导致跳转失效。
内容的提问来源于stack exchange,提问作者Sandeep Reddy
相关产品推荐
相关产品推荐

