【问题标题】:How to route request to www.MyDomain.com to specific controller class and method如何将请求路由到 www.MyDomain.com 到特定的控制器类和方法
【发布时间】:2013-12-12 13:02:47
【问题描述】:

在我的 MVC 应用程序中,当用户访问 www.MyDomain.com/Home 时,由于 Global.asax 中有以下路由条目,因此在 HomeController 类 Index 方法中处理此请求

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

假设如果用户访问 www.MyDomain.com/SomeParameters,我希望在 MyController 类的 Index 方法中处理此请求。参数的一个示例是 www.MyDomain.com/John。为此,我在 Global.asax 中创建了以下条目,但似乎没有受到影响。谁能指出我在这里做错了什么?

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "MyController", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

【问题讨论】:

    标签: c# asp.net-mvc-3 .net-4.0 asp.net-mvc-routing


    【解决方案1】:

    路由将 John 处理为控制器,而不是操作。所以在你的例子中 John 是控制器,因为你没有提供一个动作,它把 Index 作为默认动作。

    如果您希望将 www.MyDomain.com/John 路由到控制器 MyController、action Index 和包含 John 的参数,解决方案可能是添加以下路由(在默认路由之前):

    routes.MapRoute(
       name: "MyController",
       url: "{myparameter}",
       defaults: new { Controller = "MyController", Action = "Index" });
    

    还有控制器:

    public ActionResult Index(string myparameter)
    {
        return View("whatever"); 
    }
    

    这会将 www.MyDomain.com/John 引导至 myparameter = "John" 的 Index 操作。

    ps。在示例中 myparameter 是必需的。

    【讨论】:

    • 约翰实际上是一个参数而不是动作。
    • 并根据 Queti 的回答我调整了 url 参数(确实不需要 MyController
    【解决方案2】:

    为了拥有 www.MyDomain.com/SomeParameters,您只需创建一个默认控制器和操作方法的路由,因为它们不会在 URL 中提供。

    确保路由定义仅包含someparameters,没有其他任何内容。这样您就可以将 URL 中 / 之后的任何内容视为参数。

    routes.MapRoute(
       name: "MyController",
       url: "{someparameters}",
       defaults: new { Controller = "MyController", Action = "Index" });
    
    public ActionResult Index(string someparameters)
    {
        ...
    
        return View(); 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2012-06-10
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多