当参数使用不同的ID名称时,路由无法找到ID

时间:2015-11-20 17:42:59

标签: c# asp.net routing

我有这样的网址路径:

http://website.com/myController/myAction/123456

但是,我有时也有这个要求:

http://website.com/myController/myAction/?myID=123456

这会导致问题,因为ASP.NET正在查找ID,但我的参数名为myID。我不能改名字。无论如何我能解决这个问题吗?

如果ID为null,我试图重新路由:

Server.Transfer("/myController/myAction/123456");

但是这不起作用,我得到错误:

{"Error executing child request for /myController/myAction/123456."}

1 个答案:

答案 0 :(得分:0)

ID转换过滤器可以将myID转换为id,因此请求http://website.com/myController/myAction?myID=123456将通过此ActionFilter转换为http://website.com/myController/myAction/123456

public class IdConversionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.Request.QueryString["myID"] != null)
        {
            filterContext.ActionParameters.Clear();
            filterContext.ActionParameters.Add("id", Convert.ToInt32(filterContext.HttpContext.Request.QueryString["myID"]));
        }
    }
} 

使用IdConversionFilter

装饰myAction
[IdConversionFilter]
public ActionResult myAction(int id)
{
     return View();
}