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
相关产品推荐
相关产品推荐

