ASP.Net MVC路由问题url无法正常工作

Tho*_*mas 2 asp.net-mvc asp.net-mvc-routing

我在家庭控制器中创建两个具有不同名称的动作方法

public ActionResult Default()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";
        return View("index");
    }

    public ActionResult Index(int a)
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC! and Your Age is " + a;
        return View();
    }
Run Code Online (Sandbox Code Playgroud)

我的路由代码看起来像

    routes.MapRoute(
      "Default1", // Route name
      "{Home}/{ID}", // URL with parameters
      new { controller = "Home", action = "Index", id =UrlParameter.Optional});
            routes.MapRoute(
                "Default2", // Route name
                "{Home}", // URL with parameters
                new { controller = "Home", action = "Default" }
            );

            routes.MapRoute(
                "Default", // Route name
                "{controller}", // URL with parameters
                new { controller = "Home", action = "Default" }
            );
Run Code Online (Sandbox Code Playgroud)

但仍然有问题

当我输入像http:// localhost:7221这样的url 然后回家并调用Default()方法但是如果我输入url就好了

http:// localhost:7221/Home然后出错.为了处理这种情况我定义了路线

routes.MapRoute("Default2",//路由名称"{Home}",//带参数new {controller ="Home",action ="Default"}}的URL;

但它不起作用.......你可以告诉我为什么.

如果我输入类似http:// localhost:7221/Home/88的 url,那么应该调用Index(int a)方法但是会出错.为什么

我希望当我输入url http:// localhost:7221http:// localhost:7221/Home时应该调用Default()并且当我输入时

http:// localhost:7221/Home/88然后应该调用Index(int a).我的路线有什么问题.我怎么能纠正它.如果可能的话纠正我的路线代码.谢谢

Fen*_*ton 5

此规则实际上应涵盖您需要的一切:

        routes.MapRoute(
            "Default",
            "{controller}/{action}/{a}",
            new {
                controller = "Home",
                action = "Index",
                a = UrlParameter.Optional 
            }
        );
Run Code Online (Sandbox Code Playgroud)

请注意以下事项:

  1. 参数名称需要匹配方法上的参数,你有- id并且a- 所以框架不能匹配它们.在上面的规则中,我已经放置a了映射规则以匹配您的方法,但您应该在两个地方都给它一个更好的名称.

  2. 如果未提供控制器或操作,则此规则默认为/ Home/Index.如果你想点击你命名的动作,Default你会转到/ Home/Default

  3. 如果您提供/ Home/Index/21,它将调用Index方法 - 但如果您没有提供年龄,则会出现问题,因为您没有方法可以匹配该规则.您需要添加方法public ActionResult Index()或使用默认值public ActionResult Index(int a = 0)

以下是一些应该适用于此规则的URL示例.

  • http://yourapp/ - 将转到/ Home/Index
  • http://yourapp/Home - 将转到/ Home/Index
  • http://yourapp/Home/Default - 将转到/ Home/Default
  • http://yourapp/Home/Index - 请参阅上面的笔记 - 您需要一种方法来支持这一点
  • http://yourapp/Home/Index/21- 将转到/ Home/Index并传递a给21