2013-04-24 70 views
0

我可以在路由它之前操作url,即在MVC经过我的路由配置以查找要使用的路由之前。在ASP.NET MVC中路由之前替换url中的字符

我想替换网址中的一些字符,例如“www.test.com/ä/ö”为“www.test.com/a/o”。这样,如果用户在url中键入这些字母,则仍然会使用正确的路线。

也许有什么我可以挂钩来操纵网址?

编辑: 为了说明我想要的内容,我将添加一个示例。假设我有一个如下所示的路由配置:“{controller}/{action}”。用户输入www.test.com/MyCnntroller/MyIction,我想将其路由到控制器“MyController”和操作方法“MyAction”。在路由完成之前,我必须进行字符替换,否则不会找到匹配的路由。因此,我想在路由完成之前将所有“ö”替换为“o”,将所有“ä”替换为“a”(以及更多字符)。有没有办法做到这一点?

EDIT2: 经过一番研究,现在看来似乎是UrlRoutingModule是第一个获得该URL的ASP.NET MVC。也许有一些方法可以与之挂钩?

+0

的可能重复[我怎样才能改变路线值,然后重定向到路线?(http://stackoverflow.com/questions/3763398/how-can-i-change-然后重定向到那个路由) – cadrell0 2013-07-25 17:00:47

回答

0

检查出this question的答案。

基本上你会想要使用FilterAttributeIActionFilter,然后将注释应用到为服务路由的ActionResult。通过这种方式,您可以使用中间方法在路由配置处理URL之前操作URL。

+0

我没有很多操作过滤器的经验,但我不认为这对我有帮助。如果我正确理解它们,actionfilters将在action方法本身执行之前或之后执行。我想要的是在控制器和操作方法被选中之前操作url(通过路由配置)。 – haagel 2013-04-25 06:50:48

1

在这个post通过创建自定义路由处理程序是可能的。

using System.Web.Routing; 
namespace My.Services 
{ 
    public class MyRouteHander : IRouteHandler 
    { 
    ApplicationDbContext Db = new ApplicationDbContext(); 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     // Get route data values 
     var routeData = requestContext.RouteData; 
     var action = routeData.GetRequiredString("action"); 
     var controller = routeData.GetRequiredString("controller"); 

     //modify your action name here 

      requestContext.RouteData.Values["action"] = actionName; 
      requestContext.RouteData.Values["controller"] = "SpecialController"; 

     return new MvcHandler(requestContext); 
    } 
} 

}