如何在MVC 3中获取URL重写的参数值

时间:2014-08-25 17:57:54

标签: c# asp.net-mvc-3 global-variables asp.net-mvc-routing

为此:

http://example.com/ClubOpeningTool?c=66

我知道我可以使用控制器方法参数或

  Request.QueryString["c"];

我在Global.asax中创建了一个路由规则,它将上面的URL转换为: http://example.com/ClubOpeningTool/Index/Club/66

我注意到Request.QueryString["c"];在这种情况下不起作用,因为Request.QueryString[]数组为空。这似乎很奇怪,MVC不知道我在为Request.QueryString []数组提供水分时创建的路由规则。它不应该仍然考虑那些键和值查询字符串值并将它们放在数组中吗?

如何访问重写的查询字符串参数?是否存在另一个存储在其中的全局数组?

由于

1 个答案:

答案 0 :(得分:0)

路由和处理参数之间存在明显差异。如果为某些东西设置了路径,则需要确保控制器中的方法设置为接收您要查找的参数。

如果您的路线如下例所示。

routes.MapRoute(
            name: "HandleClub",
            url: "ClubOpeningTool/Club/{c}",
            defaults: new { controller = "ClubOpeningTool", action = "Club", c = UrlParameter.Optional }
        );

请注意,我指定这将转到ClubOpeningTool并且我传入c作为我要打开的俱乐部的可选参数。为了阅读" c"虽然我需要确保我的" Club"我正在调用的动作有c作为参数之一。如果您希望它是可选的,那么您的俱乐部开放控制器可能看起来像这样。

 public class ClubOpeningToolController : Controller
{
    //
    // GET: /ClubOpeningTool/

    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public ActionResult Club(int c = 0)
    {
        return View();
    }

}

您可能需要为此设置不同的视图或返回正确的视图。但这应该至少让你好起来。

请记住Request.QueryString [];只包含实际uri查询参数中的内容。 (之后的任何事情?)