我将控制器名称设置为“My_Controller”。我正在寻找一种方法来改变我的网址 www.mysite.com/My_Controller/My_Action www.mysite.com/my-controller/my-action / 。
无论如何不使用URL重写器扩展来执行此操作?如果是这样,怎么样?
答案 0 :(得分:4)
您可以使用路由处理程序。
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
try
{
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
}
catch { }
return base.GetHttpHandler(requestContext);
}
}
..并将其添加到您的路线中:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
).RouteHandler = new HyphenatedRouteHandler();
这意味着,只要你有一个名为“Example_Controller”的控制器,其操作名为“Example_Action”,你就可以用/ example-controller / example-action
来调用它。