忽略ASP.NET MVC中的路由导致200而不是404

时间:2009-08-28 11:30:48

标签: asp.net-mvc asp.net-routing

我们有

形式的网址
http://site/controller.mvc/action

如果我们不小心将图像的相对URL写入html(例如src="imgs/img1.gif"),则会导致浏览器发出请求:

http://site/controller.mvc/action/imgs/img1.gif

将其路由到控制器,但无法解析为操作方法。

这很好,除非我们宁愿使用路由来防止这种情况发生(因此TempData不会被清空等等)。

但是,如果我们设置一个自定义约束来阻止这种情况发生(使用正则表达式),我们得到一个200和一个空响应,而不是预期的404.任何想法?

2 个答案:

答案 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