【问题标题】:how to deal "+" in asp.net mvc3 routes?如何处理 asp.net mvc3 路由中的“+”?
【发布时间】:2012-02-21 15:35:29
【问题描述】:

我的路线:

routes.MapRoute(
    "Tag",
    "tag/{t}/{action}",
    new { controller = "tag", action = "unsolved" }
    );

链接如下:

<a href="/tag/@(Uri.EscapeDataString(tagName))/unsolved">@tagName</a>

如果tagName不包含“+”,一切正常,否则,如“http://www.test.com/tag/c%2B%2B/unsolved”(%2B来自@(Uri.EscapeDataString ("+")),我收到错误:HTTP 错误 404.11 - 未找到

谁能帮助我?谢谢!

【问题讨论】:

    标签: asp.net-mvc-3 routes


    【解决方案1】:

    您可以尝试在 web.config 的 &lt;system.webServer&gt; 部分中允许双重转义,因为我怀疑您仅在 IIS 7 中而不是在 Visual Studio 开发服务器中遇到此问题(顺便说一下,您应该提到在你的问题中):

    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
        <modules runAllManagedModulesForAllRequests="true"/>
        <security>
            <requestFiltering allowDoubleEscaping="true"/>
        </security>
    </system.webServer>
    

    延伸阅读:http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

    【讨论】:

    • 由于某种原因,我无法修改 web.config,有其他解决方案吗?
    • @artwl,没有。在这种情况下,您将不得不用其他东西替换这个字符。 Web 服务器不允许您使用它。另一种可能性是对标签使用查询字符串参数(如/tags/unsolved?tag=...),而不是将其放在路径部分。
    • 谢谢@Darin,我不知道 IIS 和 Casini 之间有什么区别,你为我节省了大量时间。
    【解决方案2】:

    您的 MVC Web 应用程序会生成一个包含任何字符(%、+、/ 等)的链接。所以使用 URL 编码字符串并生成链接:

    new UrlHelper(HttpContext.Current.Request.RequestContext)
           .RouteUrl("Tag", 
                     new { tagName= HttpContext.Current.Server.UrlEncode(tagName) };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-27
      • 2013-01-31
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多