5

在我的 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。)

4

2 回答 2

1

我推荐 URL Rwrite Outbounds 规则。

为 URL 重写模块创建出站规则:URL 重写模块 2:URL 重写模块:Microsoft IIS 官方站点

示例配置:

    <rewrite>
        <outboundRules>
            <rule name="RewriteSlash">
                <match filterByTags="A" pattern="^/IISApplicationName/$" />
                <action type="Rewrite" value="/IISApplicationName" />
            </rule>
        </outboundRules>
    </rewrite>
于 2012-07-04T13:27:39.640 回答
0

有什么方法可以防止 ASP.NET MVC 路由将斜杠附加到上述路由?

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

这是因为根据 HTTP/1.1,

绝对路径不能为空;如果原始 URI 中不存在任何内容,则必须将其指定为“/”(服务器根目录)。

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

于 2012-07-04T11:11:54.833 回答