asp.net-mvc – ASP.net MVC支持带有连字符的URL

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – ASP.net MVC支持带有连字符的URL前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有一个简单的方法可以让MvcRouteHandler将传入URL的动作和控制器部分中的所有连字符转换为下划线,因为方法或类名中不支持连字符。

这将是我可以支持这样的结构,如sample.com/test-page/edit-details映射到Action edit_details和controller test_pagecontroller,同时继续使用MapRoute方法

我知道我可以指定一个动作名称属性支持连字符在控制器名称,手动添加路由实现这,但我正在寻找一个自动化的方式,以便在添加新的控制器和操作时保存错误

解决方法

C#版本的约翰的帖子任何人谁喜欢它: C# and VB version on my blog
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);
        }
    }

…和新路线:

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

你可以使用下面的方法,但要记住,你需要命名视图My-Action,如果你喜欢让visual studio自动生成你的视图文件,这可能很讨厌。

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

猜你在找的asp.Net相关文章