删除ASP.NET MVC 4路由到应用程序根目录中的尾随斜杠

时间:2012-07-04 08:38:57

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

在我的ASP.NET MVC 4应用程序的RouteConfig文件中,我注册了以下默认路由:

routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "home", action = "index", id = UrlParameter.Optional });

现在,在我的Razor视图中,我想生成一个指向应用程序根目录的URL:

<a href="@Url.Action("index", "home")">Home</a>

生成的URL包含尾部斜杠;单击该链接将打开页面 localhost / IISApplicationName /。但是,我希望URL不包含尾部斜杠,以便URL为 localhost / IISApplicationName 。为其他操作生成路由(例如 / Account / Login )不会创建带有斜杠的URL - 它只是链接到应用程序根目录的路径。

有没有办法阻止ASP.NET MVC路由将尾部斜杠附加到上述路由?

(我知道我可以从包含斜杠的URL重定向到没有斜杠的URL,但我宁愿让路由首先生成正确的路由URL。)

2 个答案:

答案 0 :(得分:1)

我建议使用网址重写出站规则。

Creating Outbound Rules for URL Rewrite Module : URL Rewrite Module 2 : URL Rewrite Module : The Official Microsoft IIS Site

示例配置:

    <rewrite>
        <outboundRules>
            <rule name="RewriteSlash">
                <match filterByTags="A" pattern="^/IISApplicationName/$" />
                <action type="Rewrite" value="/IISApplicationName" />
            </rule>
        </outboundRules>
    </rewrite>

答案 1 :(得分:0)

  

有没有办法阻止ASP.NET MVC路由追加   斜线到上面的路线?

当相对路径为空时,您应该传递一个尾部斜杠。如果您以某种方式生成带有href localhost/IISApplicationName的链接,浏览器会在末尾附加一个“/”(您可以轻松地在firebug中验证这一点,只需在浏览器地址栏中输入http://stackoverflow.com,然后检查请求标签,您可以看到尾随“/”)。

这是因为根据HTTP / 1.1,

  

绝对路径不能是空的;如果原件中没有   URI,它被赋予“/”(服务器根目录)。

http://www.faqs.org/rfcs/rfc2616.html#ixzz0kGcaRbqU(第5.1.2节)