路线在生产环境中不起作用

时间:2012-06-13 21:20:47

标签: asp.net-mvc-3 routes

我创建了以下路线

 routes.MapRoute("ThumbnailRoute",// Route name
           "Image/{action}/{session}/{parentId}/{fileName}/{ctype}/{thumbNailSize}", // URL with parameters
           new { controller = "Image", action = "GenerateThumbnail", session = "", parentId = "", fileName = "", ctype = "", thumbNailSize = 70 },  // Parameter defaults 
           new { controller = @"[^\.]*", action = @"[^\.]*" });

我的扩展方法返回一个像下面这样的字符串,它将是img标签的src属性:

 return string.Format("/{0}/{1}/{2}/{3}/{4}/{5}/{6}", controller, action, session, parentId, fileName, ctype, thumbNailSize);

当我右键单击页面并为dev和prod环境选择属性时,src av img标记是相同的(http:// localhost / Image / GenerateThumbnail / de-DE / 121 / 0beac6da-7c09-4faf-ad4b -48326f9d337e.jpg / jpeg / 70)只有不同的是域名(localhost,www.domain.com),但图片de不会出现在prod上。谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

如果生产版本的URL看起来很好 - 可能问题不在于路由,而在于操作方法中的代码。

您是否在点击生产网址时检查了从浏览器获得的回复?

浏览http://www.domain.com/Image/GenerateThumbnail/de-DE/121/0beac6da-7c09-4faf-ad4b-48326f9d337e.jpg/jpeg/70时会得到什么回复?

答案 1 :(得分:0)

永远不要像你那样对网址进行硬编码。始终使用网址助手。问题是,当您在IIS中部署应用程序时,会有一个虚拟目录名称。所以正确的网址如下:

http://foo.com/MyAppName/Image/GenerateThumbnail/de-DE/121/0beac6da-7c09-4faf-ad4b-48326f9d337e.jpg/jpeg/70

而不是:

http://foo.com/Image/GenerateThumbnail/de-DE/121/0beac6da-7c09-4faf-ad4b-48326f9d337e.jpg/jpeg/70

由于您已经对网址进行了硬编码,因此您获得了404。

因此,使用RouteUrl方法生成它,如果有的话,将考虑此虚拟目录。不要使用任何字符串格式来构建URL:

public ActionResult Index()
{
    string url = Url.RouteUrl("ThumbnailRoute", new
    {
        action = "GenerateThumbnail",
        controller = "Image",
        session = session,
        parentId = parentId,
        fileName = fileName,
        ctype = ctype,
        thumbNailSize = thumbNailSize
    });

    ...
}