C# 如何使控制器';s名称连字符“-&引用;分开?
我可以使用C# 如何使控制器';s名称连字符“-&引用;分开?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我可以使用 [ActionName("My-Action-Name")] public ActionResult MyActionName() { return View(); } 但是我在更改控制器的名称时遇到了一个问题。 是否有一些注释可用于在MVC4中分隔控制器名称连字符(-) 有点像这样: [ControllerName("My-Controller-Name")] public class MyControllerName : Controller { } 你可以用 它也
[ActionName("My-Action-Name")]
public ActionResult MyActionName()
{
return View();
}
但是我在更改控制器的名称时遇到了一个问题。
是否有一些注释可用于在MVC4中分隔控制器名称连字符(-)
有点像这样:
[ControllerName("My-Controller-Name")]
public class MyControllerName : Controller
{
}
你可以用
它也有MVC5版本
你可以在下面找到一些例子
这是一个很好的答案:
添加自定义管线处理程序(在“替换零件”中选择要如何处理连字符):
并在您的RouteConfig
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
new HyphenatedRouteHandler())
);
我喜欢@aleha的答案,但我想为MapRoute这样做,因为我需要一个路由名称 在这种情况下,您可以执行以下操作:
Route route = routes.MapRoute(
"RouteName",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
route.RouteHandler = new HyphenatedRouteHandler();
感谢@R.Schreurs solutions。这就是我的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();
}
}
提供几个示例可能会很有用,而不仅仅是一个链接。属性路由仅适用于MVC5。你不能在MVC4中使用它,这里有一个nuget包。是的,你可以。然后答案应该明确,它不是指ASP.NETMVC的属性路由,而是指一个2年前的nuget包。这两种实现不兼容。OP可能更愿意升级到MVC 5,而不是在以后面临迁移问题。为什么不提供这些细节的答案呢?我将+1。这是一个路由问题,而不是重命名。定义路由时应执行此操作。如果需要路由名称,请参阅以获取使用MapRoute的替代方法。
Route route = routes.MapRoute(
"RouteName",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
route.RouteHandler = new HyphenatedRouteHandler();
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();
}
}