2011-09-21 120 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(); 
}