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

ASP.NET Core 8 MVC/C#项目:根据来源站点跳转页面问题

ASP.NET Core 8 MVC 根据访客来源站点跳转的正确实现

你之前的代码依赖source参数判断来源,但访客从x.com跳转时不会自动携带这个参数,导致判断条件永远不成立,所以直接返回了默认的Index页面。正确的做法是通过请求头中的Referer字段获取访客的来源站点,具体实现如下:

实现代码

public IActionResult Index()
{
    // 获取Referer请求头,该字段记录了访客的来源页面地址
    var refererHeader = Request.Headers.Referer.ToString();

    if (!string.IsNullOrWhiteSpace(refererHeader))
    {
        // 尝试解析Referer为Uri对象,避免格式错误导致异常
        if (Uri.TryCreate(refererHeader, UriKind.Absolute, out var refererUri))
        {
            // 匹配来源站点的Host,忽略大小写确保兼容性
            if (refererUri.Host.Equals("x.com", StringComparison.OrdinalIgnoreCase))
            {
                // 来自x.com,跳转到Index1页面
                return RedirectToAction("Index1");
            }
        }
    }

    // 无Referer(直接访问)或来源非x.com,返回默认Index页面
    return View();
}

关键注意事项

  • Referer头的局限性:部分浏览器的隐私模式或安全设置会禁止发送Referer头,这种情况会被判定为直接访问,跳转到默认Index页面。
  • 域名匹配逻辑调整:如果需要匹配x.com的子域名(如www.x.com、blog.x.com),可以将Host判断逻辑改为:
    if (refererUri.Host.EndsWith(".x.com", StringComparison.OrdinalIgnoreCase))
    
  • 异常处理:必须用Uri.TryCreate解析Referer,避免非法格式的Referer导致程序抛出异常。

内容的提问来源于stack exchange,提问作者Erdem Çelebi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:13:17