You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:25:16