如何在URL中更改ASP.NET MVC控制器名称?

时间:2015-10-26 11:18:35

标签: c# asp.net-mvc url controller

如果我们有" example_name" ,我们可以使用 [ActionName("")] 在网址中更改它。所以,我想为控制器名称执行此操作。

我可以这样做:

ControllerName> example_nameController >在网址中:" / example_controller"

我想在网址中更改控制器名称:" / example-conroller"

5 个答案:

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