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

Cag*_*tay 18 c# url asp.net-mvc controller

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

我可以做这个:

URL中的ControllerName> example_nameController >:"/ example_controller"

我想在URL中更改这样的控制器名称:"/ example-conroller"

use*_*689 23

您需要使用属性路由,这是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();
    }
}
Run Code Online (Sandbox Code Playgroud)

使用RoutePrefix控制器顶部的属性可以在整个控制器上定义路径.

如前所述,此功能在MVC 5中原生可用,如果您使用的是以前版本的MVC,则需要添加以下NuGet包:AttributeRouting并在控制器中添加以下内容:

using AttributeRouting;
using AttributeRouting.Web.Mvc;
Run Code Online (Sandbox Code Playgroud)


如果您调用了另一个控制器example_name2Controller并且想要添加链接到它的超链接,则可以按如下方式轻松执行:

@Html.ActionLink("Go to example-name2", "Index", "example_name2");
Run Code Online (Sandbox Code Playgroud)

您不需要调用将重定向到的操作example_name2Controller,但如果您需要在其他情况下执行此操作,则可以这样执行:

public ActionResult RedirectToExample_Name2Controller()
{
    return RedirectToAction("Index", "example_name2");
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*ees 13

你可以通过 Routes.cs

routes.MapRoute(
      name: "Controller",
      url: "example-controller/{action}",
      defaults: new { 
      controller = "ControllerName", action ="Index"
      }   
);
Run Code Online (Sandbox Code Playgroud)

还有另一种方法,如果你看一下这个问题的答案:如何在ASP.NET MVC中实现动态控制器和动作方法?


Mur*_*ro2 12

user449689s答案很好,但他忘了提你需要添加

routes.MapMvcAttributeRoutes();
Run Code Online (Sandbox Code Playgroud)

到RouteConfig.cs的RegisterRoutes()