特殊字符 ?在routes.MapRoute url参数.Net MVC 4中

时间:2014-11-26 12:27:03

标签: .net asp.net-mvc-4 asp.net-mvc-routing

我创建了一个新的网站,我想保留旧的链接只是为了做一个RedirectPermanent。 为此,我写了一个新的控制器

public class RedirectController : Controller
{
    //
    // GET: /Redirect/

    public ActionResult Index()
    {
        return RedirectPermanent("~/");
    }
   ...

在RouteConfig.cs中,我将路由写为

        routes.MapRoute(
            name: "Redirect 301 prensa",
            url: "press.aspx", defaults: new { controller = "Redirect", action = "Index" }
        );

用于重定向缓存在客户上的旧网址

我的问题是当我想把特殊字符“?”在url参数

        routes.MapRoute(
            name: "Redirect 301 prensa",
            url: "press.aspx?id=1", defaults: new { controller = "Redirect", action = "Index" }
        );

应用程序编译好但崩溃开始说Url不能包含?字符

我的web.config就像

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\" requestValidationMode="2.0"/>
<pages controlRenderingCompatibilityVersion="4.0" validateRequest="false"/>

编写特殊字符的想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

我认为您应该尝试重新配置路由映射,并使用通配符表达式对这两个路由进行分组:

routes.MapRoute(
        name: "Redirect 301 prensa",
        url: "{press.aspx*}", defaults: new { controller = "Redirect", action = "Index" }
    );

通过这种方式,相关的网址(press.aspx,press.asx?id = 1 press.asxpAnything)将被重定向到同一个地方。

并检查web.config中的requestPathInvalidCharacters以允许使用字符&#39;?&#39;可能&#39;&amp;&#39;。