【问题标题】:How can I replace _ with - in my URL in ASP.NET MVC3?如何在 ASP.NET MVC3 的 URL 中将 _ 替换为 -?
【发布时间】:2012-07-19 05:25:54
【问题描述】:

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

是否可以在不使用 URL 重写器扩展的情况下执行此操作?如果有,怎么做?

【问题讨论】:

  • 为什么不能重命名控制器?
  • 我认为命名控制器时不允许使用破折号。
  • 我没听说过,但我又没试过!
  • 嗯,我刚刚试了一下,效果很好。

标签: c# asp.net-mvc-3 url-rewriting seo


【解决方案1】:

您可以使用路由处理程序。

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

【讨论】:

  • 感谢您的意见。让我试试看!
  • 非常感谢!像魅力一样工作!
  • 对于它的价值,我刚刚创建了一个新的 Mvc3 网站,并专门命名了控制器名称中带有下划线,它工作得很好。只有创建一个名为 my_controller 的控制器和一个名为 index 的操作会产生一个 localhost:87821/My_/index 的 url
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 2013-01-29
  • 1970-01-01
  • 2015-05-09
  • 2014-09-22
相关资源
最近更新 更多