C# 传递Google Analytics utm查询字符串参数的ASP.MVC筛选器
我正在尝试构建一个过滤器,当应用它时,它将传递“utm_3;”查询字符串参数 这就是我想到的:C# 传递Google Analytics utm查询字符串参数的ASP.MVC筛选器,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试构建一个过滤器,当应用它时,它将传递“utm_3;”查询字符串参数 这就是我想到的: public class PassAlongParametersFilter : FilterAttribute, IResultFilter { public string Filter { get; set; } public PassAlongParametersFilter() { Filter = "*"; } public voi
public class PassAlongParametersFilter : FilterAttribute, IResultFilter
{
public string Filter { get; set; }
public PassAlongParametersFilter()
{
Filter = "*";
}
public void OnResultExecuting(ResultExecutingContext filterContext)
{
}
public void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
{
var action = (RedirectToRouteResult) filterContext.Result;
var qs = filterContext.RequestContext.HttpContext.Request.QueryString;
var regex = StringUtils.WildcardToRegex(Filter);
var routeValues = action.RouteValues;
qs.AllKeys.Where(e => Regex.IsMatch(e, regex)).ForEach(s => routeValues[s] = qs[s]);
filterContext.Result = new RedirectToRouteResult(action.RouteName, routeValues, action.Permanent);
}
}
}
我可以看到在调试时RouteValue被正确填充,但是utm参数没有包含在结果url中
这是过滤器的操作:
[HttpPost]
[AllowAnonymous]
[PassAlongParametersFilter(Filter = "utm_*")]
[Route("konto/registrera/externt/{campaignCode}")]
public ActionResult SimpleRegisterExternal(string email, string campaignCode)
{
这就是我试图重定向到的操作:
[AllowAnonymous]
[Route("konto/registrera/tack")]
public ActionResult RegisterThanks(RegisterThanksViewModel model)
{
我猜是路由问题吧?好吧,我想出来了。在OnResultExecuted中替换结果为时已晚。以下是我最终得到的结果:
public class PassAlongParametersFilter : ActionFilterAttribute
{
public string Filter { get; set; }
public PassAlongParametersFilter()
{
Filter = "*";
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
{
var action = (RedirectToRouteResult)filterContext.Result;
var qs = filterContext.RequestContext.HttpContext.Request.QueryString;
var regex = StringUtils.WildcardToRegex(Filter);
var routeValues = action.RouteValues;
qs.AllKeys.Where(e => Regex.IsMatch(e, regex)).ForEach(s => routeValues[s] = qs[s]);
filterContext.Result = new RedirectToRouteResult(action.RouteName, routeValues, action.Permanent);
}
}
}