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

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....