码迷,mamicode.com
首页 > Windows程序 > 详细

WebApi参数传递

时间:2015-07-13 13:52:47      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:

c# webapi的参数传递方式:1、查询字符串(query string);2、内容主体(content body)

当然也有cookie或url部分或头部信息(header)等其它传方式,这里仅讨论这两种。

1、查询字符串(query string)

如果是简单数据类型或使用了FromUri特性修饰的参数,将使用查询字符串作为数据源。

例1:因为参数p为复合类型,默认使用request body做为数据源,所以如果想以query string为数据源,则不能省略 FromUri修饰。

 1     /// <summary>
 2     /// <example>
 3     /// 调用方式:
 4     ///     test?p=1&p=2
 5     ///     test?p[]=1,2
 6     /// </example>
 7     /// </summary>
 8     public class Test : ApiController
 9     {
10         public string Post([FromUri]string[] p)
11         {
12             if (p == null)
13                 return "NULL";
14             else if (p.Length == 0)
15                 return "EMPTY";
16             else return string.Join(",", p);
17         }
18     }

 

例2:

 1     /// <summary>
 2     /// <example>
 3     /// 调用方式:
 4     ///     test?p=1
 5     /// </example>
 6     /// </summary>
 7     public class Test : ApiController
 8     {
 9         public string Post(string p)
10         {
11             if (p == null)
12                 return "NULL";
13             else if (p.Length == 0)
14                 return "EMPTY";
15             else return string.Join(",", p);
16         }
17     }

2、内容主体(content body)

如果是复合数据类型或使用了FromBody特性修饰的参数,将使用内容主体作为数据源。在webapi中,body不会被缓存,仅可获取一次,故只能对body接收一次参数,所以不适合传递多参数数据。

例1:x-www-form-urlencoded编码方式时,注意不能带参数名。

 1     /// <summary>
 2     /// <example>
 3     /// post请求头:
 4     ///     Content-Type: application/x-www-form-urlencoded
 5     ///     Cache-Control: no-cache
 6     ///
 7     ///     =v1&=v2
 8     /// </example>
 9     /// </summary>
10     public class TestController : ApiController
11     {
12         public string Post([FromBody]string[] p)
13         {
14             if (p == null)
15                 return "NULL";
16             else if (p.Length == 0)
17                 return "EMPTY";
18             else return string.Join(",", p);
19         }
20     }

例2:Content-Type为json时

 1     /// <summary>
 2     /// <example>
 3     /// post请求头:
 4     ///     Content-Type: application/json
 5     ///     Cache-Control: no-cache
 6     ///
 7     ///     ["v1","v2"]
 8     /// </example>
 9     /// </summary>
10     public class TestController : ApiController
11     {
12         public string Post([FromBody]string[] p)
13         {
14             if (p == null)
15                 return "NULL";
16             else if (p.Length == 0)
17                 return "EMPTY";
18             else return string.Join(",", p);
19         }
20     }

 

WebApi参数传递

标签:

原文地址:http://www.cnblogs.com/lazyls/p/4642630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!