Comment faire en sorte que le nom du contrôleur soit un trait “-” séparé?

Je suis capable d’utiliser le

[ActionName("My-Action-Name")] public ActionResult MyActionName() { return View(); } 

Mais je suis confronté à un problème pour changer le nom du contrôleur. Existe-t-il une annotation permettant de séparer le nom du contrôleur d’un trait d’union (-) dans MVC 4?

Un peu comme ça:

 [ControllerName("My-Controller-Name")] public class MyControllerName : Controller { } 

Voici une bonne réponse:

Ajouter un gestionnaire d’itinéraire personnalisé (dans la partie de remplacement, choisissez comment vous souhaitez gérer les traits d’union):

 public class HyphenatedRouteHandler : MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToSsortingng().Replace("-", ""); requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToSsortingng().Replace("-", ""); return base.GetHttpHandler(requestContext); } } 

et l’utiliser dans votre RouteConfig

 routes.Add( new Route("{controller}/{action}/{id}", new RouteValueDictionary( new { controller = "Home", action = "Index", id = UrlParameter.Optional }), new HyphenatedRouteHandler()) ); 

Vous pouvez utiliser le routage d’atsortingbuts .

Il vient dans MVC 5 aussi.

Vous pouvez trouver quelques exemples ci-dessous.

http://blogs.msdn.com/b/webdev/archive/2013/10/17/atsortingbute-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) { ... } } 

J’aime la réponse de @aleha, mais je voulais le faire pour MapRoute, car j’ai besoin d’un nom de route.

Dans de tels cas, vous pouvez faire ceci:

  Route route = routes.MapRoute( "RouteName", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); route.RouteHandler = new HyphenatedRouteHandler(); 

Merci à @R. Solutions Schreurs. Voici à quoi ressemble maintenant ma classe RouteConfig et le nom de mon contrôleur fonctionne désormais avec un trait d’union.

 public class RouteConfig { public class HyphenatedRouteHandler : MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext requestContext) { requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToSsortingng().Replace("-", ""); requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToSsortingng().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(); } }