1

在我的 HomeController 中,我试图使用 Request.QueryString 获取信息

        string aa = Request.QueryString["aa"];
        string bb = Request.QueryString["bb"];

所以在地址栏中我期待这样的东西:

<某事>?aa=12345&bb=67890

我创建了一条新路线:

        routes.MapRoute(
            "Receive",
            "Receive",
            new { controller = "Home", action = "Index" }
        );

我正在尝试以这种方式使用它:
http://localhost:54321/Receive?aa=12345&bb=67890

但我收到以下错误:

无法找到该资源。

说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/接收

4

4 回答 4

2

您可以通过 2 种方式访问​​查询字符串值...

  • 获取控制器初始化中的值
  • 在你的行动中使用价值观
  • 用这些变量指定路线

1 - 获取控制器初始化中的值

protected override void Initialize(RequestContext requestContext) {
    // you can access and assign here what you need and it will be fired
    //  for every time he controller is initialized / call

    string aa = requestContext.HttpContext.Request.QueryString["aa"],
           bb = requestContext.HttpContext.Request.QueryString["bb"];

    base.Initialize(requestContext);
}

2 - 在你的行动中使用价值观

public void ActionResult Index(string aa, string bb) {
    // use the variables aa and bb, 
    //  they are the routing values for the keys aa and bb
}

3 - 使用这些变量指定路线

routes.MapRoute(
    "Receive",
    "Receive/{aa}/{bb}",
    new { 
        controller = "Home", 
        action = "Index", 
        aa = UrlParameter.Optional, 
        bb = UrlParameter.Optional }
);
于 2011-11-07T06:48:20.583 回答
2

我认为你的路由出错了,这就是你得到 404 的原因。请看一些教程,特别是这里:asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

另外,就像@YuriyFaktorovich 所说,你真的不应该使用Request.QueryString,而是将它们作为参数传递给你的操作方法

VB中的示例:

Function Retrieve(ByVal aa as String, ByVal bb as String) as ActionResult
于 2011-11-07T15:42:06.537 回答
0

用于"Receive/"路由中的 url,不要使用Request.Querystring.

您可以将您的操作修改为

public ActionResult Index(string aa, string bb) {...}

ASP.Net MVC 框架将为您补充这些项目。

于 2011-11-07T06:44:59.820 回答
0

您的 HTTP 404 错误是因为您的新路由很可能位于错误的位置。确保您的新路线在默认路线之前:

routes.MapRoute(
        "Receive",
        "Receive",
        new { controller = "Home", action = "Index" }
    ); 

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
于 2011-11-07T13:46:56.470 回答