Как измениться ASP.NET имя контроллера MVC в URL?

Если у нас есть "example_name" мы можем изменить его в url, используя [ActionName ("")] Итак, я хочу сделать это для имя контроллера.

Я могу сделать это:

ControllerName > example_nameController > в URL:" / example_controller"

Я хотел бы изменить имя контроллера, как это в URL-адрес: "/ example-conroller"

5 ответов


вам нужно использовать Маршрут, функция, представленная в 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");
}

Вы можете сделать это с помощью Routes.cs

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

есть и другой путь, если вы посмотрите на ответ на этот вопрос: как достигнуть динамического регулятора и метода действия внутри ASP.NET MVC?


user449689s ответ хорош, но он забыл упомянуть, что вам нужно добавить

routes.MapMvcAttributeRoutes();

в RegisterRoutes () вашего RouteConfig.cs


можно использовать Маршрут.

[RoutePrefix("Users")]
public class HomeController : Controller
{
    //Route: Users/Index
    [Route("Index")]
    public ActionResult Index()
    {
        return View();
    }
}

вы можете указать в маршрутах.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+"} 
  );