asp.net-mvc - ASP.NET MVC 路由如何工作?

标签 asp.net-mvc routes

我定义了以下路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = "" }
    );

    // Added custom route here!
    routes.MapRoute(
        "CatchAll", 
        "{*catchall}," 
        new { controller = "Error", action = "NotFound" }
    );
}

没什么新东西 - 这是默认的 ASP.NET MVC1 RegisterRoutes方法,添加了一个自定义路由。

现在,如果我转到以下网址,则会收到 404 ...
http://whatever/Home/MissingActionMethod

所以没有 ActionMethodMissingActionMethodHomeController .那么,这是否意味着,如果我转到上面定义的第一条路线.. 并且找不到操作.. 然后我要回来尝试第二条路线吗?重复冲洗?

或者,一旦我匹配了一条路线,我就会尝试执行该路线 .. 如果我失败了(即,发现操作丢失).. 那么 .. 运气不好?博斯基?

干杯!

编辑/更新:

感谢大家的回复,但他们没有正确阅读我的问题:(我知道
1)路线的顺序很重要
b) haack 的路由调试器

但我的问题与此无关。我在问..如果第一条路线被“处理”..但失败..然后它会在列表中向下一个吗?

所以,在我上面的例子中。第一个名为“默认”的路由与请求的 url/资源匹配......但是当框架试图找到一个缺少的 Action 时......它是 404 的。

所以..这是否意味着框架首先匹配“默认”路由..尝试它..失败..回到路由列表..试图找到下一个匹配的路由..最后失败所以它然后放弃?

或者它只找到它匹配的第一个也是第一个路由..如果它找不到 Controller 和/或 Action ..然后它就放弃了? (这是我怀疑的)。如果是这样..它是如何找出404的?

更新#2:

Phil Haack actually talks about my question ,有点......但没有回答我好奇的部分 - >它如何以及在哪里确定找不到404资源。

最佳答案

我不认为它会检查第二条路线,因为指定的第一个路线是默认的。我认为如果你切换它们,它会检查 CatchAll,看到它与 URL 中指定的路由不匹配,然后回退到默认值,因为你只提供 Controller 名称,而不是路由。我想如果你想让 CatchAll 做任何事情,你必须点击 http://whatever/CatchAll/Error/MissingActionMethod ,并且它必须在默认值之前出现。

this以获得更深入的信息。

关于asp.net-mvc - ASP.NET MVC 路由如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2438668/

相关文章:

asp.net-mvc - MVC3 Html.HiddenFor(Model => Model.Id) 不传回 Controller

c# - MVC Azure 中 OnActionExecuting 中 Controller 的实例化(...不抛出 404)

ruby-on-rails - rails 半复杂 STI 与祖先数据模型规划路线和 Controller

原生处理路由(改变状态)的Javascript框架

ruby-on-rails-3 - Rails 3 根据登录状态拥有两个不同主页的最佳方式

asp.net-mvc - .NET MVC : How to implement different page appearance per user?

c# - 为什么我选择的值在下拉列表中显示两次 (asp.net mvc)

ruby-on-rails - ruby 和 rails 中的资源路由

c# - 如何在不返回 View() 的情况下在 MVC ASP.NET 中显示消息框

c# - 实体被移动而不是添加