2015-08-01 4 views
1

У меня проблема с моей маршрутизацией. Я пытаюсь предотвратить ошибки 404 в конечном итоге в моем настраиваемом методе маршрутизации.ASP MVC маршрутизации 404 и проблема с изображениями

Это некоторые из моих маршрутов:

 routes.IgnoreRoute("Content/{*pathInfo}"); 
     routes.IgnoreRoute("{*allfiles}", new { allfiles = @".*\.(css|js|gif|jpg|png)" }); 

     routes.MapRoute(
      name: "MenuRoute", 
      url: "{*permalink}", 
      defaults: new { controller = "Menu", action = "Index" }, 
      constraints: new { permalink = new MenuUrlConstraint() } 
     ); 

Моя проблема заключается в том, что каждый раз 404 появляется для статических файлов, они идут к моему MenuRoute.

Есть ли способ избежать этого?

Или это единственное решение, которое можно проверить на 404 в моем маршрутном ограничении и ничего не делать, если так?

----- EDIT ----

public class MenuUrlConstraint : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 

     var db = new ApplicationDbContext(); 
     var permalink = values[parameterName] != null ? values[parameterName].ToString() : ""; 
     return db.MenuItems.Any(p => p.Url == permalink && p.Published == true); 
    } 

} 

ответ

0

маршрутизация работает как переключатель саз в c#. Если ограничение маршрута возвращает true, оно приводит к тому, что маршрутизация использует текущий маршрут, а не проверяет все настроенные после него маршруты.

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

if (httpContext.Response.StatusCode == 404) return false; 

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

+0

Привет, Ограничение вернет false, когда его уже 404. Тем не менее, отслеживание маршрута проверяет БД для пули и т. Д. Мне не нужно, если 404 на изображениях и т. Д., Очевидно:> Как вы сказали, я мог бы сделать то, что вы предлагаете в моем ограничении. Я думал, что, возможно, этого можно избежать, если общие маршруты, где настройка отличается или что-то еще? Ill опубликуйте мой метод поиска в EDIT по оригинальному вопросу. – jan