拦截ASP.NET MVC路由

时间:2011-09-21 14:21:28

标签: c# .net asp.net-mvc routing

我需要在服务器端创建链接时转换一些url参数。

示例:

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

现在我必须转换id参数,以便我可以简单地转换它并将其传递给对象objectRoute参数,或者我可以简单地覆盖ActionLink.But问题是我必须在整个项目上进行重构。

所以我正在寻找拦截机制或处理机制的方法。

这有什么解决方案吗?

1 个答案:

答案 0 :(得分: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();
}