为此:
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 []数组提供水分时创建的路由规则。它不应该仍然考虑那些键和值查询字符串值并将它们放在数组中吗?
如何访问重写的查询字符串参数?是否存在另一个存储在其中的全局数组?
由于
答案 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查询参数中的内容。 (之后的任何事情?)