我可以使用
[ActionName("My-Action-Name")]
public ActionResult MyActionName()
{
return View();
}
但是我在更改控制器名称方面遇到了问题。 是否有一些注释可用于在MVC 4中分隔控制器名称连字符( - )?
有点像这样:
[ControllerName("My-Controller-Name")]
public class MyControllerName : Controller
{
}
答案 0 :(得分:6)
Here是一个很好的答案:
添加自定义路由处理程序(在替换部分中选择您想要处理连字符的方式):
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "");
return base.GetHttpHandler(requestContext);
}
}
并在RouteConfig
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new HyphenatedRouteHandler())
);
答案 1 :(得分:4)
您可以使用Attribute Routing。
它也出现在MVC 5中。
您可以在下面找到一些示例。
http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx
[RoutePrefix("Book-Reviews")]
public class ReviewsController : Controller
{
// eg.: /reviews
[Route]
public ActionResult Index() { ... }
// eg.: /reviews/5
[Route("{reviewId}")]
public ActionResult Show(int reviewId) { ... }
// eg.: /reviews/5/edit
[Route("{reviewId}/edit")]
public ActionResult Edit(int reviewId) { ... }
}
答案 2 :(得分:1)
我喜欢@aleha的答案,但是想为MapRoute做这个,因为我需要一个路由名称。
在这种情况下,你可以这样做:
Route route = routes.MapRoute(
"RouteName",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
route.RouteHandler = new HyphenatedRouteHandler();
答案 3 :(得分:0)
感谢@R。 Schreurs解决方案。这就是我的RouteConfig类现在看起来像我的控制器名称现在使用连字符。
public class RouteConfig
{
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "");
return base.GetHttpHandler(requestContext);
}
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new HyphenatedRouteHandler();
}
}