如何在ASP.NET Core MVC中用C#实现URL重定向
在ASP.NET Core MVC中实现特定域名/链接的全局重定向
你当前的代码存在两个核心问题:
- 字符串语法错误:
if (requestedUrl.Equals("https://ExampleLink.com))未正确闭合引号,正确写法应为if (requestedUrl.Equals("https://ExampleLink.com")) - 拦截范围有限:仅能处理访问
RedirectExample这个Action的请求,无法覆盖所有发往目标域名的请求,不符合你“所有发往http://example.com的请求都重定向”的需求
以下是几种更合适的实现方案:
方案1:使用中间件(推荐,全局拦截所有请求)
中间件可在请求进入MVC管道前处理,适合全局重定向场景。在Program.cs中添加如下代码:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var app = builder.Build(); // 重定向中间件需放在MVC中间件之前 app.Use(async (context, next) => { // 获取请求主机名(仅匹配域名,忽略路径) var requestedHost = context.Request.Host.Host; // 若需匹配完整URL,可使用 context.Request.GetEncodedUrl() // 忽略大小写匹配目标域名 if (string.Equals(requestedHost, "example.com", StringComparison.OrdinalIgnoreCase)) { // 301永久重定向(SEO友好),临时重定向可设置permanent: false context.Response.Redirect("https://RedirectLink.com", permanent: true); return; } // 不匹配则继续执行后续管道 await next(); }); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
方案2:使用控制器过滤器(针对控制器/Action范围)
若仅需在特定控制器或Action中处理,可实现全局过滤器:
首先创建过滤器类:
public class RedirectFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { var requestedUrl = context.HttpContext.Request.GetEncodedUrl(); if (string.Equals(requestedUrl, "https://example.com", StringComparison.OrdinalIgnoreCase)) { context.Result = new RedirectResult("https://RedirectLink.com", permanent: true); } } public void OnActionExecuted(ActionExecutedContext context) { // 无需额外处理 } }
然后在Program.cs中注册全局过滤器:
builder.Services.AddControllersWithViews(options => { options.Filters.Add<RedirectFilter>(); });
方案3:使用路由重定向(适合特定路径)
若仅需重定向特定路径,可直接在路由中配置:
app.MapControllerRoute( name: "redirectRoot", pattern: "", // 匹配网站根路径 defaults: new { controller = "Home", action = "RedirectToTarget" });
接着在HomeController中添加对应Action:
public IActionResult RedirectToTarget() { return RedirectPermanent("https://RedirectLink.com"); }
重定向类型说明
Redirect():对应302临时重定向,适合临时跳转场景RedirectPermanent():对应301永久重定向,适合SEO优化,告知搜索引擎链接已永久迁移
内容的提问来源于stack exchange,提问作者Daniel Bailey
相关产品推荐
相关产品推荐

