在我的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
);
答案 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();
}