Remove Trailing Slash in ASP.NET MVC 4 Route to Application Root

岁酱吖の 提交于 2019-12-09 06:27:36

问题


In my ASP.NET MVC 4 application's RouteConfig file, I have registered the following default route:

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

Now, in my Razor views, I want to generate a URL to my application's root like that:

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

The generated URL includes a trailing slash; clicking the link thus opens the page localhost/IISApplicationName/. However, I want the URL not to contain the trailing slash so that the URL is localhost/IISApplicationName. Generating routes for other actions, such as /Account/Login, does not create URLs with trailing slashes — it's just about the route linking to my application's root.

Is there any way to prevent ASP.NET MVC routing from appending the trailing slash to the above route?

(I know that I can redirect from the URL including the slash to the one without it, but I'd rather have routing generate the correct route URL in the first place.)


回答1:


Is there any way to prevent ASP.NET MVC routing from appending the trailing slash to the above route?

You should pass a trailing slash when the relative path is empty. If you somehow generate links with href localhost/IISApplicationName still the browser appends a "/" at the end (you can easily verify this in firebug, just type http://stackoverflow.com in the browser address bar and check the requests tab you can see the trailing "/").

This is because as per the HTTP/1.1,

the absolute path cannot be emtpy; if none is present in the original URI, it mut be given as "/" (the server root).

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




回答2:


I recommend URL Rwrite Outbounds rules.

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

Sample config:

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


来源:https://stackoverflow.com/questions/11325425/remove-trailing-slash-in-asp-net-mvc-4-route-to-application-root

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!