我创建了以下路线
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上。谢谢你的帮助
答案 0 :(得分:0)
如果生产版本的URL看起来很好 - 可能问题不在于路由,而在于操作方法中的代码。
您是否在点击生产网址时检查了从浏览器获得的回复?
答案 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
});
...
}