路由在ASP中是如何工作的.净MVC4

本文关键字:工作 MVC4 何工作 ASP 路由 | 更新日期: 2023-09-27 17:54:31

我正在开发一个ASP。NET MVC4应用程序,我是新来的。我有两个MapRoutes用于路由。

routes.MapRoute("Char", 
                "ABC/Alpha/{number1}", 
                 defaults: new { Controller = "ABC", action = "Alpha" });           
routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index",  id=UrlParameter.Optional }
        );

我没有给MapRoutes中的number1分配任何默认值。但我知道它是强制性的,因为它在URL路径中。

如果我没有提供任何参数在url(当我运行应用程序),我应该得到一个错误,但我没有。

。:

http://localhost:32066/ABC/alpha/value---- getting desired output.
http://localhost:32066/abc/alpha/     ---- expected an error but there is no error.

有人能帮我吗?

路由在ASP中是如何工作的.净MVC4

不匹配第一条路由,但匹配第二条路由。所以它得到controller/action = ABC/Alpha, Id是可选的

Kyle是对的,第二个路由(这是全局默认的)匹配的url是有效的,因此你不会看到一个错误。我猜你正在跟随微软官方培训视频之一,该视频模拟了由于错误的url不尊重路由路径而导致的请求错误。若要模拟错误,请删除默认路由,编译项目并运行。只有这一次指定您列出的第二个url,您应该看到错误。

从上到下检查路由路径,在第一个例子中

{Controller}/{Action}/{ID}

是由你传递的(这里必须提到id),所以First路由可以工作

但是Magic你期望第二种情况抛出错误,它应该有,因为如果你的Action是

public ActionResult ActionName(int id)
{
//some Code
}

那么肯定会抛出类似Action

的错误
"Cannot convert null to 'int' because it is a non-nullable value type"

,我很确定你的Action会有

 public ActionResult(int? id)
 {//Some Code here}

Public ActionResult()
{
//Some Code here
 }