【问题标题】:MVC Url helper method for static pages?静态页面的 MVC Url 辅助方法?
【发布时间】:2011-03-25 16:49:39
【问题描述】:

如果我有一个像"/something/something/" 这样的网址,而我的网站是http://mysite.com,我想链接到那个网址,有没有像Url.Content(); 这样的方法可以在IIS 中发现网站的虚拟目录并映射是否适合 url 路径?

我试过Url.GenerateContentUrl(), Url.Action(), Url.Content(), Url.RouteUrl()

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-2 url-routing


    【解决方案1】:

    有没有像 Url.Content(); 这样的方法

    既然有Url.Content,为什么要点赞

    var url = Url.Content("~/something/something");
    

    它将处理虚拟目录名称,如果您的端部署在根http://example.com,它将返回/something/something,如果您有一个虚拟目录http://example.com/applicationname,它将返回/applicationname/something/something

    因此,每次需要链接静态资源时,都应始终使用Url.Content。例如:

    <img src="<%= Url.Content("~/images/foo.png") %>" alt="" />
    

    无论您的网站部署到何处,都将始终正确解析图片网址。

    【讨论】:

      【解决方案2】:

      如果出于某种原因,您不能只使用 Url.Content,则可以改用 HostingEnvironment.ApplicationVirtualPathHttpContext.Current.Server.MapPath

      但我想不出你不能只使用 Url.Content 的充分理由。

      【讨论】:

        【解决方案3】:

        这是我的假设:

        您网站的根目录上有一个类似myfile.jpg 的文件。然后你想要一个像这样的网址:

        http://mysite.com/myfile.jpg 
        

        对吗?

        您需要做的就是在Global.asax.cs 的路由中添加这个:

        routes.IgnoreRoute("myfile.jpg");
        

        是的,它也应该适用于子文件夹。

        【讨论】:

        • 不,它是一个链接到动作结果的路由,所以没有文件扩展名,只是一个虚拟路由 url。它实际上看起来像这样:“/pagename/actionname/”,但没有与之关联的控制器或操作方法,因为它只是路由表中的一个条目。
        • @Shawn 我完全不清楚你想要什么?你想公开文件吗?页数?什么?
        • 好的,那么当用户访问 url 时你想要什么?
        • 服务器 1 映射到 IIS 的 ROOT 级别 (Mysite.com/PageName/RouteValue) 服务器 2 位于虚拟目录 (MySite.com/VirtualDir/PageName/RouteValue) 所以如果我硬编码 它将在服务器 2 上中断,反之亦然在服务器 1 上。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 1970-01-01
        • 2011-09-06
        • 1970-01-01
        • 2014-10-04
        • 2017-10-22
        • 2014-12-02
        相关资源
        最近更新 更多