首页 新闻 会员 周边

webapi中如何获取post传入的数据

2
悬赏园豆:10 [已解决问题] 解决于 2015-01-07 09:31

所有的controller 都继承自 我定义的父类 basecontroller ,basecontroller 继承自apicontroller。

 

在basecontroller中重写方法 public override Task<HttpResponseMessage> ExecuteAsync(System.Web.Http.Controllers.HttpControllerContext controllerContext,System.Threading.CancellationToken cancellationToken)

在这个方法里

获取get传入的数据 使用 httpContext.Request.QueryString

获取post传入的数据怎么 取??

求教。大神们来吧

simadi的主页 simadi | 初学一级 | 园豆:134
提问于:2014-07-09 21:58
< >
分享
最佳答案
1

Request.QueryString(取得地址栏参数值),获取地址栏中的参数,意思就是取得 Url ”?"号后面的参数值.如果参数有多个就用 ”” 符号连接起来。

    取值:Request.QueryString["Url地址栏中的参数名称"]


  Request.Form(取得表单参数值),获取提交的Form中的元素的值。

    取值:Request.Form["表单元素的name属性名称"]

收获园豆:10
晓菜鸟 | 老鸟四级 |园豆:2594 | 2014-07-10 08:47

这样得不到的,你试过吗?

simadi | 园豆:134 (初学一级) | 2014-07-10 08:59

@simadi: 我试过啊,确定,肯定,以及一定,你的参数传递是哪样的?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-10 09:12

@晓菜鸟:  具体的代码在这里 http://q.cnblogs.com/q/63832/

simadi | 园豆:134 (初学一级) | 2014-07-10 11:02

@simadi: 从winform窗体里面传值过来?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-10 11:37

@晓菜鸟: 是的

simadi | 园豆:134 (初学一级) | 2014-07-10 11:37

@simadi: 待会忙完了写个例子帮你看看问题所在吧,稍等。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-10 13:47

@simadi: 

在Web API的controller当中,只要方法名以“Get”开头,就会匹配所有的Get请求,同理以Post开头的方法,

将匹配所有的Post请求。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-07-10 14:08
其他回答(6)
0

HttpContext.Request.Form["name"]

Lucien! | 园豆:371 (菜鸟二级) | 2014-07-09 22:32

这样得不到的,你试过吗?

支持(0) 反对(0) simadi | 园豆:134 (初学一级) | 2014-07-10 08:59
0

byte[] byts = new byte[HttpContext.Current.Request.InputStream.Length];
HttpContext.Current.Request.InputStream.Read(byts, 0, byts.Length);
string req = System.Text.Encoding.Default.GetString(byts);

这是直接获取post上来的字符流数据。什么编码送的什么编码收就没有问题了。如果是你发送的表单就Request.Form去收。记住字符流数据只能收一次哟。

路飞的小蝴蝶 | 园豆:46 (初学一级) | 2014-08-12 13:24

我现在也遇到这样的问题,

// 把文件读取到二进制数组
FileStream fs = new FileStream(_path, FileMode.Open, FileAccess.Read);
byte[] buffer = new byte[1024 * 1024];
await fs.ReadAsync(buffer, 0, buffer.Length);

HttpResponseMessage response = await client.PostAsJsonAsync("http://localhost:50935/api/User/ postuserinfo", buffer);

string jsonData = await response.Content.ReadAsStringAsync();
string a=JsonConvert.DeserializeObject<string>(jsonData);

这样我在api 的postuserinfo里面怎么来接受数据?新手啊

修改了一下回答

//api 

public string postuserinfo(byte[] by)
{
//FileStream fs = new FileStream();
byte[] byts = new byte[HttpContext.Current.Request.InputStream.Length];
byts = by;
HttpContext.Current.Request.InputStream.Read(byts, 0, byts.Length);
string req = System.Text.Encoding.Default.GetString(byts);

return req;
}

结果返回的中文乱码,不过还是解决了主要问题,在这里提一个问题:如果我要上传视频文件也可以这么写吗?

支持(0) 反对(0) 碎碎念 安锦流年 | 园豆:146 (初学一级) | 2014-12-08 22:23
2

没发现一个回答正确的

正确答案如下

HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];//获取传统context     
HttpRequestBase request = context.Request;//定义传统request对象
string name = request.Form["name"];    
Arthur.Wang | 园豆:25 (初学一级) | 2015-06-24 14:02

顶你,顶!顶!顶!

支持(0) 反对(1) i迷倪 | 园豆:185 (初学一级) | 2015-08-17 16:24

可是如果Request.Properties里没有MS_HttpContext怎么办??

支持(0) 反对(0) Brian_C# | 园豆:211 (菜鸟二级) | 2016-02-17 16:09

只有这个答案是正确的。

支持(0) 反对(0) jumtre | 园豆:200 (初学一级) | 2018-03-02 16:27
0

好多凭空想象的回答

chenhp | 园豆:9 (初学一级) | 2016-12-06 10:08

支持(0) 反对(0) simadi | 园豆:134 (初学一级) | 2016-12-06 10:08
0

HttpRequest rq=   HttpContext.Current.Request;

土豆尼 | 园豆:202 (菜鸟二级) | 2016-12-23 16:01
0

全是凭空想像  估计好多人还不知道什么叫webapi ,这是微软独立搞的一套http机制 全是坑

大道无情 | 园豆:152 (初学一级) | 2018-04-14 23:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册