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

如何在Asp.net Core中识别用户的广告引流网站来源?

在ASP.NET Core中判断用户的广告来源网站

要通过UrlReferrer实现用户来源追踪,核心是获取请求的Referer头并处理来源信息,以下是具体实现步骤和注意事项:

1. 获取请求的Referrer信息

在Controller或Middleware中,有两种方式获取Referrer:

  • 直接读取请求头:Request.Headers["Referer"](返回字符串格式)
  • 使用强类型Uri对象:Request.GetTypedHeaders().Referer(推荐,更方便解析域名、协议等信息)

示例代码(Controller中):

using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

public class HomeController : Controller
{
    private readonly ILogger<HomeController> _logger;

    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        var referrerUri = Request.GetTypedHeaders().Referer;
        if (referrerUri != null)
        {
            // 提取来源域名(例如从https://ad-partner-abc.com/promo中拿到ad-partner-abc.com)
            string sourceDomain = referrerUri.Host;
            
            // 将来源记录到日志或业务数据库
            _logger.LogInformation("用户来自广告合作网站: {SourceDomain}", sourceDomain);
            
            // 临时存储来源信息,避免后续站内跳转后Referrer变为本站域名
            HttpContext.Session.SetString("AdSource", sourceDomain);
        }
        else
        {
            // 无Referrer的场景:用户直接输入网址、隐私模式访问、浏览器禁用Referrer等
            _logger.LogInformation("用户无有效来源Referrer");
        }
        return View();
    }
}

2. 持久化来源信息

用户在站内跳转时,后续请求的Referrer会变为你的网站域名,因此需要把首次获取的来源信息持久化,常用两种方式:

  • Session:适用于会话内追踪,会话结束后自动失效
  • Cookie:可设置较长有效期,支持跨会话追踪用户来源

Cookie存储示例:

if (referrerUri != null && !Request.Cookies.ContainsKey("AdSource"))
{
    string sourceDomain = referrerUri.Host;
    Response.Cookies.Append("AdSource", sourceDomain, new CookieOptions
    {
        Expires = DateTimeOffset.Now.AddDays(30),
        HttpOnly = true, // 防止前端JS读取,提升安全性
        Secure = Request.IsHttps // HTTPS网站建议开启,仅在HTTPS环境下传输Cookie
    });
}

3. 补充方案:自定义URL参数

由于Referrer可能因浏览器隐私设置、重定向等场景丢失,建议同时配合自定义URL参数(如https://your-site.com?source=partner-x)作为补充,优先读取参数再降级到Referrer:

public IActionResult Index()
{
    string source = Request.Query["source"];
    if (!string.IsNullOrWhiteSpace(source))
    {
        Response.Cookies.Append("AdSource", source, new CookieOptions { Expires = DateTimeOffset.Now.AddDays(30) });
    }
    else
    {
        var referrerUri = Request.GetTypedHeaders().Referer;
        if (referrerUri != null)
        {
            Response.Cookies.Append("AdSource", referrerUri.Host, new CookieOptions { Expires = DateTimeOffset.Now.AddDays(30) });
        }
    }
    return View();
}

注意事项

  • 必须做空值判断:浏览器可能因隐私策略不发送Referer头,直接使用会引发空引用异常
  • 跨协议场景限制:从HTTPS网站跳转到HTTP网站时,大多数浏览器不会发送Referrer
  • 域名解析灵活处理:如果广告合作方有多个子域名,可根据需求提取主域名(如sub.ad-partner.com提取为ad-partner.com)

内容的提问来源于stack exchange,提问作者Sina Yar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:57:25