ASP MVC路由404和图像问题

时间:2015-08-01 10:42:15

标签: c# asp.net-mvc routes

我的路由有问题。我试图阻止404错误结束我的自定义routeconstraint。

这是我的一些路线:

        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。

我有办法避免这种情况发生吗?

或者是在我的routeconstraint中检查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);
    }

}

1 个答案:

答案 0 :(得分:0)

路由就像c#中的switch case语句一样工作。如果路由约束返回true,则会导致路由使用当前路由,而不检查其后配置的任何路由。

所以,是的,一个可能的解决方案是使用一个保护条款来确保404状态永远不会返回true。

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

可能有更好的解决方案来确保您的路线约束仅在您需要时返回true,但由于您没有发布代码,我无法提供建议。