如果我们有" example_name" ,我们可以使用 [ActionName("")] 在网址中更改它。所以,我想为控制器名称执行此操作。
我可以这样做:
ControllerName> example_nameController >在网址中:" / example_controller"
我想在网址中更改控制器名称:" / example-conroller"
答案 0 :(得分:20)
您需要使用Attribute Routing,这是MVC 5中引入的一项功能。
根据您的示例,您应该按如下方式编辑控制器:
[RoutePrefix("example-name")]
public class example_nameController : Controller
{
// Route: example-name/Index
[Route]
public ActionResult Index()
{
return View();
}
// Route: example-name/Contact
[Route]
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
使用控制器顶部的RoutePrefix
属性可以在整个控制器上定义路径。
如前所述,此功能在MVC 5中原生可用,如果您使用的是以前版本的MVC,则需要添加以下NuGet包:AttributeRouting并在控制器中添加以下内容:
using AttributeRouting;
using AttributeRouting.Web.Mvc;
<小时/> 如果您有另一个名为
example_name2Controller
的控制器,并且您想要添加链接到它的超链接,您可以按照以下步骤轻松完成:
@Html.ActionLink("Go to example-name2", "Index", "example_name2");
您无需调用将重定向到example_name2Controller
的操作,但如果您需要在其他情况下执行此操作,则可以这样执行:
public ActionResult RedirectToExample_Name2Controller()
{
return RedirectToAction("Index", "example_name2");
}
答案 1 :(得分:13)
您可以通过Routes.cs
routes.MapRoute(
name: "Controller",
url: "example-controller/{action}",
defaults: new {
controller = "ControllerName", action ="Index"
}
);
如果你看一下这个问题的答案,还有另一种方法:How to achieve a dynamic controller and action method in ASP.NET MVC?
答案 2 :(得分:10)
user449689s答案很好,但他忘了提你需要添加
routes.MapMvcAttributeRoutes();
到RouteConfig.cs的RegisterRoutes()
答案 3 :(得分:2)
您可以使用Attribute Routing。
[RoutePrefix("Users")]
public class HomeController : Controller
{
//Route: Users/Index
[Route("Index")]
public ActionResult Index()
{
return View();
}
}
答案 4 :(得分:1)
您可以在Routes.cs中指定
routes.MapRoute(
name: "College",
url: "Student/{studentId}",
defaults: new { controller = "Student", action = "Details"}
);
我们可以将这样的约束定义为
routes.MapRoute(
name: "College",
url: "Student/{studentId}",
defaults: new { controller = "Student", action = "Details"},
constraints:new{id=@"\d+"}
);