WebApi参数传递

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     }
时间: 2024-10-12 13:44:35

WebApi参数传递的相关文章

WebApi参数传递总结

在WebAPI中,请求主体(HttpContent)只能被读取一次,不被缓存,只能向前读取的流. 举例子说明: 1. 请求地址:/?id=123&name=bob 服务端方法: void Action(int id, string name) // 所有参数都是简单类型,因而都将来自url 2. 请求地址:/?id=123&name=bob 服务端方法: void Action([FromUri] int id, [FromUri] string name) // 同上 void Acti

WebApi参数传递总结(转)

出处:http://www.cnblogs.com/Juvy/p/3903974.html 在WebAPI中,请求主体(HttpContent)只能被读取一次,不被缓存,只能向前读取的流. 举例子说明: 1. 请求地址:/?id=123&name=bob 服务端方法: void Action(int id, string name) // 所有参数都是简单类型,因而都将来自url 2. 请求地址:/?id=123&name=bob 服务端方法: void Action([FromUri]

webapi get请求 FromUri list参数传递

今天做项目调用第三方的webapi时,发现get请求竟然用的是FromUri list参数,汗... 这里简单记录下请求传参的方式(但不推荐大家使用get FromUri list参数 来定义webapi的功能): 1 HttpClient hClient = new HttpClient(new MyHttpClienHanlder()); 2 3 string url = "http://api.test.com/api/pk/index?pkId=2322"; 4 //var r

WebApi 接口参数不再困惑:传参详解

转自:http://www.cnblogs.com/landeanfen/p/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.“怪异”的get请求 二.post请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 4.后台发送请求参数的传递 三.put请求 1.基础类型参数 2.实体作为参数 3.数组作为参数 四.delete请求 五.总结 正文 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如

写给新手的WebAPI实践

此篇是写给新手的Demo,用于参考和借鉴,用于发散思路.老鸟可以忽略了. 自己经常有这种情况,遇到一个新东西或难题,在了解和解决之前总是说"等搞定了一定要写篇文章记录下来",但是当掌握了之后,就感觉好简单呀不值得写下来了.其实这篇也一样,决定写下来是想在春节前最后再干一件正经事儿! 目录: 请求响应的设计 请求的Content-Type和模型绑定 自定义ApiResult和ApiControllerBase 权限验证 模型生成 文档生成 一.请求响应的设计 RESTFul风格响亮很久了

C# WebApi传参之Post请求-AJAX

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷.  学无止境,精益求精    上一节讲述了C# WebApi传参之Get请求-AJAX 本节讲述C# WebApi传参之Post请求-AJAX,说起Ajax针对webApi的Post请求,真的不敢恭维,确实比较怪异,如果你不幸要写一个Ajax Post请求webApi接口,那么您还是有必要花点时间看看本篇博客,如果你也遇到了同样的问题,就不妨在最后给本篇博客点个赞.谢谢 说

Asp.Net WebApi Post请求整理(一)

Asp.Net WebApi+JQuery Ajax的Get请求整理 一.总结 1.WebApi 默认支持Post提交处理,返回的结果为json对象,前台不需要手动反序列化处理.2.WebApi 接收Post提交参数需要指定([FromBody] string name)3.WebApi 中如果只接收一个基础类型参数,不能指定key的名称4.WebApi Post请求Action只能接收一个参数,也就是说一个Action中[FromBody]仅可指定一次5.WebApi Post请求处理多个参数

WebApi传递JSON参数

开发过程中经常进行JSON的传递,在WebApi中传递JSON字串时,会发现服务器端接收到不参数值,看下面代码 服务端: public void Post([FromBody]string value) { LoggerHelper.Info("Post:{0}", value); } 客户端: HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQ

WebApi传参总动员(三)

上篇介绍了如何从输入流中获取实体对象.本篇介绍以url形式传递参数.简单的参数不再赘述,这里主要实现形如(string name,Woman woman)这样的参数传递. 本篇及后面几章均涉及js调用及C#调用,而且篇幅较长,请大家见谅. 一.js调用. WebApi: public class ValuesController : ApiController { [HttpPost] public string GetData(string name,Woman woman) { return