2013-04-24 71 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); 
    } 
} 

}