使用 RouteMagic MVC 保留查询字符串参数

Posted

技术标签:

【中文标题】使用 RouteMagic MVC 保留查询字符串参数【英文标题】:Preserving query-string parameters with RouteMagic MVC 【发布时间】:2012-03-06 11:00:22 【问题描述】:

有没有办法通过使用 RouteMagic MVC 进行重定向来保留查询字符串参数或所有参数?我需要旧网址:LegacyPage.aspx?q=value 重定向到 New/NewAction?q=value。下面的示例给出了一个奇怪的结果,New/NewAction?q=q,而不是查询字符串的实际值。我尝试了各种排列都没有运气。任何帮助将不胜感激。

var newRoute = routes.MapRoute(
    "New", 
    "New", 
    new  controller = "New", action = "NewAction"
);

routes.Redirect(r => r.MapRoute("Legacy", "LegacyPage.aspx"), true)
    .To(newRoute);

【问题讨论】:

【参考方案1】:

我还希望将查询字符串参数移动到目标 url。但我连你的情况都弄不明白。我正在使用 1.2 版本的 routeMagic。我查看了源代码:

public IHttpHandler GetHttpHandler(RequestContext requestContext) 
  var requestRouteValues = requestContext.RouteData.Values;

  var routeValues = AdditionalRouteValues.Merge(requestRouteValues);

  var vpd = TargetRoute.GetVirtualPath(requestContext, routeValues);
  string targetUrl = null;
  if (vpd != null) 
    targetUrl = "~/" + vpd.VirtualPath;
    return new RedirectHttpHandler(targetUrl, Permanent, isReusable: false);
  
  return new DelegateHttpHandler(
    httpContext => httpContext.Response.StatusCode = 404, false);

而且好像没有在 targeUrl 中添加查询字符串参数。

【讨论】:

以上是关于使用 RouteMagic MVC 保留查询字符串参数的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC - 重定向后保留请求参数

如何使用可选的查询字符串参数测试 MVC 路由

在 ASP.NET MVC 站点中实现 Session 的公认模式是啥?

MVC3 - 使用包含时对数据库查询进行排序

如何进行重定向并保留查询字符串?

asp.net查询字符串加密生成sql保留关键字并阻塞请求