Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使控制器';s名称连字符“-&引用;分开?_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

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();
    }
}