如何在asp.net WEB API中传递多个查询字符串参数

时间:2017-08-08 05:02:07

标签: c# asp.net asp.net-web-api asp.net-web-api2

我想知道如何将多个查询字符串值传递给我的web api项目。我通过参考可以传递ID的教程制作了一个。

// GET: api/Product
        public IQueryable<product> Getproducts()
        {
            return db.products;
        }

        // GET: api/Product/5
        [ResponseType(typeof(product))]
        public IHttpActionResult Getproduct(int id)
        {
            product product = db.products.Find(id);
            if (product == null)
            {
                return NotFound();
            }

            return Ok(product);
        }

请帮助我理解如果我有多个参数可以通过&amp;我怎么能用querystring

来做呢

更新

public class ProductController : ApiController
    {
        public IEnumerable<product> Get()
        {
            using(foxbop7g_foxbox_mainEntities entities = new foxbop7g_foxbox_mainEntities())
            {
                return entities.products.ToList();
            }
        }

        public product Get(string status)
        {
            using (foxbop7g_foxbox_mainEntities entities = new foxbop7g_foxbox_mainEntities())
            {
                return entities.products.FirstOrDefault(e => e.status == status);
            }
        }
    }

3 个答案:

答案 0 :(得分:2)

  

如果我有多个参数,请帮助我理解   传递与传播我怎么能用querystring

来做呢

您可以将它们作为参数添加到您的方法中。例如,如果通过指定产品ID和类别获得产品的含义,您可以定义:

[ResponseType(typeof(product))]
public IHttpActionResult Getproduct(int id, string category)

如果您必须为GET请求执行此操作,这是常见的解决方案。 (GET请求没有POST作为POST或PUT等请求)。如果你有一个POST,PUT,...请求,你可以通过定义一个模型(一个具有你想从POST接收的属性的类,PUT ......)来匹配你的值,然后将其定义为方法并使用[FromBody]属性作为前缀。

E.g。

[HttpPut]
public IHttpActionResult Customer([FromBody] CustomerModel)

public class CustomerModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

答案 1 :(得分:0)

如果搜索特定记录,请使用带有lambda表达式的Single或SingleOrDefault方法(p =&gt; p.id)。通过SingleorDefault,您可以执行查询。启用延迟加载时,只能查找。 如果搜索很多使用Where(也使用lambda表达式)并且不要忘记添加.ToList();最后,你想迭代它们来显示例如。如果有外键,请使用.Include进行预先加载。

答案 2 :(得分:0)

您可以通过以下方式之一完成此操作:

  1. Uri binding (Using [FromUri]):您可以在网址中传递参数,然后使用[FromUri]属性修饰action参数。例如:你的方法可能是这样的 public HttpResponseMessage Get([FromUri]String someInput1, [FromUri]String someInput2) {} 你要求uri可以像...?someInput1=param1&someInput2=param2

  2. 来自Request.GetQueryNameValuePairs()的
  3. :这将获得所有查询参数作为可数的键值对。然后你可以做类似的事情:

  4. var queryStrings = Request.GetQueryNameValuePairs();
    
    var key = "queryKey";//forexample:"someInput1" in the above url
    
    var match = queryStrings.FirstOrDefault(keyValue =>String.Compare(keyValue.Key,key,StringComparison.OrdinalIgnoreCase)==0);
    
    var value = match.Value;
    

    请查看以下链接以进一步了解:

    1. https://www.strathweb.com/2013/04/asp-net-web-api-parameter-binding-part-1-understanding-binding-from-uri/

    2. https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api