1

我将控制器名称设置为“My_Controller”。我正在寻找一种将我的 URL 从www.mysite.com/My_Controller/My_Action更改 为 www.mysite.com/my-controller/my-action/的方法。

在不使用 URL 重写器扩展的情况下,有没有办法做到这一点?如果是这样,怎么做?

4

1 回答 1

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 调用它

于 2012-07-19T23:39:10.977 回答