我的项目是多语言的,也有路由,但我需要在网址中允许使用连字符,例如:example.com/en/our-team。
在这个网站(http://www.bousie.co.uk/blog/allow-dashes-within-urls-using-asp-net-mvc4/)中,我找到了一个解决方案,在Global.asax中添加以下代码:
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);
}
}
在RouteConfig.cs上,替换为:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
有了这个:
routes.Add(
new Route("{controller}/{action}/{id}",
new RouteValueDictionary(
new { controller = "Home", action = "Index", id = "" }),
new HyphenatedRouteHandler())
);
问题在于我不知道如何在我的代码中执行此操作:
using System.Web.Mvc;
using System.Web.Routing;
namespace theme_mvc
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapLocalizeRoute("Default",
url: "{culture}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
constraints: new { culture = "[a-zA-Z]{1}[a-zA-Z]{1}" });
routes.MapRouteToLocalizeRedirect("RedirectToLocalize",
url: "{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
}
}
我如何调整我的代码以支持URL中的连字符( - )?
答案 0 :(得分:0)
您发布的链接使用了错误的方法。路由是双向映射,但如果您只自定义MvcRouteHandler,则只考虑传入路由。
此问题经常发生,有人在GitHub上创建了一个hyphenated lowercase route项目,除了你需要将它与你MapLocalizeRoute
调用的路由结合起来之外,它会做你想做的事情。扩展方法。
但是,由于您尚未发布MapLocalizeRoute
或MapRouteToLocalizeRedirect
的代码,我无法告诉您这是如何完成的。