有没有一种简单的方法可以让 MvcRouteHandler 将传入 URL 的操作和控制器部分中的所有连字符转换为下划线,因为方法或类名称中不支持连字符。
这样我就可以支持诸如 example.com/test-page/edit-details 之类的结构映射到 Action edit_details 和控制器 test_pagecontroller,同时继续使用 MapRoute 方法。
我知道我可以指定操作名称属性并支持控制器名称中的连字符,从而手动添加路由来实现此目的,但是我正在寻找一种自动化方法,以便在添加新控制器和操作时保存错误。
John's Post 的 C# 版本,适合任何喜欢它的人:我的博客上有 C# 和 VB 版本 http://blog.didsburydesign.com/2010/02/how-to-allow-hyphens-in-urls-using-asp-net-mvc-2/
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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)