2

大家好:我正在开发一个 .net mvc3 应用程序。这是我的控制器和操作:

public class Foo_Bar : Controller
{
     public ViewResult Foo_Bar()        
    {

        return View();
    }
}

而我的对应视图文件是:Foo_Bar.cshtml

现在,我的问题是:我有一个网址:www.mystite.com/foo-bar/foo-bar 但是这个网址不能调用 Foo_Bar/Foo_Bar 控制器和操作,除非我把它写成:www.mystite.com /foo_bar/foo_bar 。

现在我需要在路由系统映射我的控制器和动作之前将“-”替换为“_”。我可以在 routes.MapRoute() 中执行此操作吗?有人请帮助我。谢谢你提前!ps:这是我第一次在堆栈溢出中提出问题:)

4

2 回答 2

2

您可以创建自定义来更改和RouteHandler的值。首先,创建您的 RouteHandler,如下所示:{action}{controller}

using System.Web.Mvc;  
using System.Web.Routing;  

public class MyRouteHandler : IRouteHandler  
{  
    public IHttpHandler GetHttpHandler(RequestContext requestContext)  
    {  
        var routeData = requestContext.RouteData;  
        var controller = routeData.Values["controller"].ToString(); 
        routeData.Values["controller"] = controller.Replace("-", "_");  
        var action = routeData.Values["action"].ToString();  
        routeData.Values["action"] = action.Replace("-", "_");  
        var handler = new MvcHandler(requestContext);  
        return handler;  
    }  
}  

然后,更改您的默认路由,如下所示:

routes.Add("Default",  
    new Route("{controller}/{action}/{id}",  
        new RouteValueDictionary(  
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }),  
            new MyRouteHandler() 
        ) 
    );  
); 

当此路由满足请求时,RouteHandler 会将破折号更改为下划线。

于 2011-10-10T03:40:53.583 回答
1

使用属性 [ActionName]

public class Foo_Bar : Controller
{
     [ActionName("foo-bar")]
     public ViewResult Foo_Bar()        
    {

        return View();
    }
}

控制器没有等价物,因此您不能在带有 {controller} 的路由中使用它。但是您至少可以明确定义它。

于 2011-10-10T03:24:14.683 回答