Как измениться 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+"}
);