【问题标题】:How to deal with IIS sub applications using MVC routing?如何处理使用MVC路由的IIS子应用程序?
【发布时间】:2012-04-26 09:16:17
【问题描述】:

我有一个 MVC 应用程序已移动到 wwwroot 中的子文件夹,并且该子文件夹已通过 IIS 成为应用程序。因此,在我的登录页面的 url 看起来像这样之前:

www.mydomain.com/login

现在看起来像这样:

www.mydomain.com/application/login

该应用程序运行良好,它似乎没有影响我的应用程序中的路由或任何链接。但是,它会导致我像这样引用图像 src 的问题:

<img src="/content/images/myimage.png"/>

当它试图从 url www.mydomain.com/content/images/myimage.png 检索图像时,显然返回 404。

在我的 global.asax 文件中,我只使用默认路由,我尝试对其进行修改以将子文件夹作为 url 的一部分:

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

但是,现在当我尝试访问根 url www.mydomain.com/application 时,我只会得到一个目录列表!如果我尝试直接访问控制器,即 www.mydomain.com/application/dashboard,我会得到 404!

有人知道如何通过 MVC 路由处理这种情况吗?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing


    【解决方案1】:
    1. 您无需更改路由。它适用于您的应用的入口点。
    2. 使用@Url.Content("~/content/images/myimage.png")。

    希望这会有所帮助。

    【讨论】:

    • 是的,我知道我可以使用 Url.Content,但我的网站很大,我不想更改所有图片引用以使用 Url.Content!
    • 您可以创建 T4 模板为您更新它们=) hanselman.com/blog/…
    • 酷不知道 T4 模板,听起来很有用我去看看
    【解决方案2】:

    试试这个...

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

    【讨论】:

    • 这不适用于这种情况,因为静态文件不会被路由。它们由 StaticFileHandler (IHttpHandler) 处理。
    • 当我尝试这个时,所有 razor ActionLink 使用都会显示以“Application”开头的锚 url,即使 ActionLink 中没有提供路由值
    猜你喜欢
    • 2012-10-10
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多