asp.net-mvc - ASP.Net MVC 路由问题 url 不工作

标签 asp.net-mvc asp.net-mvc-routing

我在家庭 Controller 中创建了两个具有不同名称的操作方法

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();
}

我的路由代码如下:

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" }
);

还是有问题

当我输入像 http://localhost:7221 这样的 URL 时 然后回家并调用 Default() 方法,但如果我键入 URL,如

http://localhost:7221/Home 然后出现错误。为了处理这种情况,我定义了这样的路线

routes.MapRoute(
    "Default2", // Route name
    "{Home}", // URL with parameters
    new { controller = "Home", action = "Default" }
);

但是它不起作用.......你能告诉我为什么吗。

如果我输入像 http://localhost:7221/Home/88 这样的 URL 然后应该调用 Index(int a) 方法但出现错误。为什么

当我输入 URL http://localhost:7221 时,我想要它 http://localhost:7221/Home 然后应该调用 Default() 以及我何时输入

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

最佳答案

这个规则实际上应该涵盖你需要的一切:

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

注意以下几点:

  1. 参数名称需要与方法上的参数匹配,您有 ida - 因此框架无法匹配它们。在上面的规则中,我在映射规则中放了a来匹配你的方法,但是你应该在这两个地方给它起一个更好的名字。

  2. 如果未提供 Controller 或操作,则此规则默认为/Home/Index。如果你想点击你命名为 Default 的 Action ,你会去/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 传递

关于asp.net-mvc - ASP.Net MVC 路由问题 url 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11841483/

相关文章:

c# - 具有不同签名的 Controller 操作方法

javascript - 在 MVC 5 中实现一个登录 LinkedIn 的窗口

asp.net-mvc - 什么对象属性包含在 ControllerBase 中使用的路由名称

asp.net-mvc-3 - 在区域注册中注册路线

json - Angular : Pass JSON Parameter to Controller for filtering

asp.net-mvc - 传递到 Html.ActionLink 时序列化模型上的 IList 属性

c# - HTTP 错误 403.14 - 禁止访问 - 带 IIS Express 的 MVC 4

c# - 获取堆栈跟踪错误并且不明白为什么

c# - 将选定的多选值传递给 Controller ​​操作

javascript - 跟踪 ASP.net MVC Web 应用程序中的注销时间