当参数使用不同的 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();
}
我有这样的 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();
}