【问题标题】:how to handle query string parameter in asp.net web api如何处理asp.net web api中的查询字符串参数
【发布时间】:2012-07-18 20:10:13
【问题描述】:

这是我的路由设置。

 routes.MapHttpRoute(
                        name: "Authors",
                        routeTemplate: "api/authors",
                        defaults: new { controller = "authors" }
                    );

控制器动作方法

// GET /api/authors/
    public string GetAuthors(string author_ids)
    {
        return data;
    }

Url http://site.com/api/authors?author_ids=1 实际上调用了控制器动作,但是当我不传递查询字符串参数时,它说找不到控制器动作匹配。

定义路由时如何处理可选的查询字符串参数?

【问题讨论】:

    标签: asp.net-mvc-routing asp.net-web-api


    【解决方案1】:
    // GET /api/authors/
        public IEnumerable<string> GetAuthors()
        {
            return data;
        }
    

    您需要定义一个不带参数的操作。

    不过,最好将 id 作为可选添加到您的路线中:

    routes.MapHttpRoute(
                            name: "Authors",
                            routeTemplate: "api/{controller}/{id}",
                            defaults: new { id = RouteParameter.Optional }
                        );
    

    【讨论】:

      【解决方案2】:

      您可以具体如下:

      routes.MapHttpRoute(
          name: "Authors",
          routeTemplate: "api/{controller}/{id}",
          defaults: new { id = RouteParameter.Optional }
      );
      

      动作可以是:

      // GET /api/authors/?XXXX
      public IEnumerable<string> GetAuthors( [FromUri] String author_ids)
      {
          return data;
      }
      

      这只会匹配 查询字符串 。 [FromUri] 允许从查询字符串中获取参数。

      【讨论】:

        【解决方案3】:

        你可能会特别喜欢:

        routes.MapHttpRoute(
            name: "Authors",
            routeTemplate: "api/{controller}/{author_ids}",
            defaults: new { author_ids = RouteParameter.Optional }
        );
        

        【讨论】:

          猜你喜欢
          • 2013-04-10
          • 2012-08-05
          • 2020-07-13
          • 2020-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-02
          • 2017-08-11
          相关资源
          最近更新 更多