Model view controller MVC路由约束在错误时给出404错误

Model view controller MVC路由约束在错误时给出404错误,model-view-controller,routing,constraints,Model View Controller,Routing,Constraints,当约束不满足时,我得到一个404页面,我认为一旦约束为false,它将移动到下一个路由。无论如何,让它转到下一条路线,而不是给出404错误 routes.MapRoute( _ name:="rewrites", _ url:="{*permalink}", _ defaults:=New With {.controller = "Pages", .action = "rewrites", .id = UrlParameter.Optional},

当约束不满足时,我得到一个404页面,我认为一旦约束为false,它将移动到下一个路由。无论如何,让它转到下一条路线,而不是给出404错误

    routes.MapRoute( _
      name:="rewrites", _
      url:="{*permalink}", _
      defaults:=New With {.controller = "Pages", .action = "rewrites", .id = UrlParameter.Optional},
      constraints:=New With {.permalink = New urlConstraint()} _
  )


    routes.MapRoute( _
        name:="Default", _
        url:="{controller}/{action}/{id}", _
        defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )






Public Function Match(httpContext As System.Web.HttpContextBase, route As System.Web.Routing.Route, parameterName As String, values As System.Web.Routing.RouteValueDictionary, routeDirection As System.Web.Routing.RouteDirection) As Boolean Implements System.Web.Routing.IRouteConstraint.Match

    If Not String.IsNullOrEmpty(values(parameterName)) Then
        If Not values.ContainsKey(parameterName) Then Return False
        Dim permalink As String = UCase(values(parameterName).ToString())
        Return Db.Routes.Any(Function(a) a.StaticUrl.ToUpper() = permalink)

    End If


    Return False
End Function

这是一个未经解析的API示例:路由参数约束的接口被命名为IRouteConstraint,可能被错误地认为是一个将请求的Url与路由匹配的约束,尽管它仅在MVC的路由引擎已经找到匹配的路由后验证路由参数

问题的答案是:当调用路由约束时,框架认为找到了该路由。现在,该框架过渡到进一步的步骤-路由约束检查。IRouteConstraint可以对框架说参数无效Match方法返回false,因此没有操作来处理请求,即使操作实际存在。。。这种情况被认为是找不到HTTP处理程序——框架发送HTTP 404,尽管它找到了路由

在这里,您可以问一个合理的问题:为什么框架不抛出Http 400-Bad请求?可能是因为没有调用操作。。?这是另一个故事