我们有
形式的网址http://site/controller.mvc/action
如果我们不小心将图像的相对URL写入html(例如src="imgs/img1.gif"
),则会导致浏览器发出请求:
http://site/controller.mvc/action/imgs/img1.gif
将其路由到控制器,但无法解析为操作方法。
这很好,除非我们宁愿使用路由来防止这种情况发生(因此TempData不会被清空等等)。
但是,如果我们设置一个自定义约束来阻止这种情况发生(使用正则表达式),我们得到一个200和一个空响应,而不是预期的404.任何想法?
答案 0 :(得分:2)
我总是用HttpRuntime.AppDomainAppVirtualPath
为我的图像添加前缀喜欢这个;
background="<%=HttpRuntime.AppDomainAppVirtualPath %>/Content/images/aqua.jpg"
另外我认为你的imgs文件夹需要在Content文件夹下。
src="/content/imgs/img1.gif
这个的快捷方式实际上是“〜”(代字号)字符,但我更喜欢把它写出来。
src="~/content/imgs/img1.gif"
您还可以创建一个静态变量来保存此值,
public static string VP = HttpRuntime.AppDomainAppVirtualPath;
然后在你的页面上这样做,
background="<%=VP%>/Content/images/aqua.jpg"
这比写一个帮助器返回一个简单的字符串要容易得多。
答案 1 :(得分:0)
我建议你使用辅助方法,然后从那里确保在路径前面加一个斜线(例如“/content/img/img1.gif”)。
请参阅http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx
上的提示#2