Игнорирование маршрута в ASP.NET MVC приводит к 200, а не к 404 - PullRequest
1 голос
/ 28 августа 2009

У нас есть URL-адреса вида

http://site/controller.mvc/action

Если мы случайно запишем относительный URL-адрес изображения в html (скажем, src="imgs/img1.gif"), это приведет к тому, что браузер сделает запрос:

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

Который маршрутизируется через контроллер, но затем не может преобразоваться в метод действия.

Это хорошо, за исключением того, что мы предпочли бы использовать маршрутизацию, чтобы предотвратить это когда-либо (таким образом, TempData не очищается и прочее).

Однако, если мы добавим пользовательское ограничение, чтобы остановить это (используя Регулярные выражения), мы получим 200 и пустой ответ, а не ожидаемые 404. Любые идеи?

Ответы [ 2 ]

2 голосов
/ 28 августа 2009

Я всегда префикс своих изображений с 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"

Это гораздо проще, чем написать помощник для возврата простой строки.

0 голосов
/ 28 августа 2009

Я бы посоветовал вам использовать вспомогательный метод, а затем оттуда обязательно поставить косую черту перед путями (например, "/content/img/img1.gif").

См. Совет № 2 в http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx

...