1

我创建了以下路线

 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),但图像不会出现在产品上。感谢您的帮助

4

2 回答 2

0

如果 URL 在生产版本上看起来不错 - 也许问题不在于路由,而在于操作方法中的代码。

在点击生产 URL 时,您是否检查过从浏览器获得的响应?

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

于 2012-06-14T00:39:27.647 回答
0

永远不要像以前那样对 URL 进行硬编码。始终使用 url 助手。问题是,当您在 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

由于您已对 url 进行硬编码,因此您会得到 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
    });

    ...
}
于 2012-06-14T05:26:21.573 回答