2011-09-21 116 views
2

我需要在服務器端創建鏈接時轉換一些url參數。攔截ASP.NET MVC路由

例子:

@html.ActionLink("text","index","Home",null,new { id=Model.Id }); 

現在我不得不變換ID參數,所以我可以簡單地將其轉換並把它傳遞到目標objectRoute參數,或者我可以簡單地覆蓋ActionLink.But問題是,我必須做出對重構整個項目。

所以我正在尋找一種截取機制或處理機制的方法。

有沒有解決方案?

+0

我無法理解你的問題確切如此,我會給你鏈接:[ASP.NET MVC路由概述](http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs)。希望這可以幫助你 –

+0

@Pankaj Upadhyay - 認爲id參數是2,我想將2轉換爲「xxkylmn」。我可以在通過它之前將其轉換,但我不想對整個項目進行重構。現在你明白了嗎? – AnyOne

+1

在這種情況下,我認爲您需要進行URL重寫而不是自定義ASP.NET路由。 –

回答

3

你可以嘗試使用ActionFilterAttribute:

public class ConversionAttribute : ActionFilterAttribute 
{  
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     var idValue = filterContext.RouteData.Values["id"]; 
     var convertedIdValue = ConvertId(idValue); 

     var newRouteValues = new RouteValueDictionary(filterContext.RouteData.Values); 
     newRouteValues["id"] = convertedIdValue; 

     filterContext.Result = new RedirectToRouteResult(newRouteValues); 
    } 
} 

然後你需要的屬性應用到您希望這種情況發生的動作:

[Conversion] 
public ActionResult Index(int id) 
{ 
    // Your logic 
    return View(); 
}