如何将请求路由到www.MyDomain.com到特定的控制器类和方法

时间:2013-12-12 13:02:47

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

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

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类的索引方法中处理此请求。参数的示例将是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
            );

2 个答案:

答案 0 :(得分:2)

路由处理 John 作为控制器,而不是操作。因此,在您的示例中, John 是控制器,因为您没有提供操作,所以它将 Index 作为默认操作。

如果您希望将www.MyDomain.com/John路由到控制器MyController,操作索引和包含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”进行索引操作。

PS。在示例中, myparameter 是必需的。

答案 1 :(得分:1)

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

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

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

public ActionResult Index(string someparameters)
{
    ...

    return View(); 
}