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

Routing can't find ID when parameter use different ID name

我有这样的 URL 路径:

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

不过,我有时也会有这样的要求:

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

这是导致问题的原因,因为 ASP.NET 正在寻找 ID,但我的参数却被称为 myID。我无法更改名称。无论如何我可以解决这个问题吗?

如果 ID 为空,我正在尝试重新路由:

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

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

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

一个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();
}