【问题标题】:Routing can't find ID when parameter use different ID name参数使用不同ID名称时路由找不到ID
【发布时间】:2016-02-23 07:22:42
【问题描述】:

我有一个这样的 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."}

【问题讨论】:

  • HttpModule 或者只是 global.asax 中的一个处理程序可能在这里很方便
  • 您能否提供一个示例,说明如何在 global.asax 中进行设置?因为我需要将参数 myID 转换为 ID

标签: c# asp.net routing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2017-11-26
    相关资源
    最近更新 更多