C#怎么使用HttpClient来Post数据
展开全部
HttpClient是对http异步请求的封装。
我的这句话你要理解两个信息,一个是http请求(支持http1.1和http1.2),另一个是异步,它有自身的好处。
httpClient支持很多verb的,例如GET/POST等等,但其方法上对部分的verb进行了单独的成员方法封装,比如GETAsync()方法就是上传GET,而PostAsync()方法就是上传Post,类似的还有Delete/Put都是异步封装。但事实上有时我们还需要其他的动词请求时,可以考虑使用SendAsync()成员方法,这个方法中封装了一个HttpRequestMessage对象,请求前需要构造这个对象,而这个对象中有一个Method的属性可以支持Get/Put/Post/Delete/Options/Tract/Headrt等常规的动作之外,还可以构造一个自定义的动作。
而在具体的使用上来说,POST时可以查看PostAsync的重载方法,要知道这个的一个异步的方法以返回时结果其实是异步的HttpResponseMessage,也就是所谓的Task<HttpResponseMessage>,接收到的对象的Result属性就是HttpResponseMessage对象。而这个对象中的StatusCode可以帮你确定状态码(如200等),而Content你应该知道是什么东西了,其实就是返回的内容,其实是对应编码解析后的文本内容。
当然,如果你需要的是流的话,目前除GetStreamAsync之外还没有其他的办法,只能使用HttpWebRequest去处理了,毕竟HttpClient是针对http请求的一个轻量级框架,并没有完成所有的http请求的情况的!
比如你的业务是POST上一个值,返回一个文件,可以考虑使用Get上传一个指定的参数(处理到Uri中)使用GetStreamAsync方法,返回的是一个Task<Stream>,如果处理的数据较为复杂,或是Post上传的参数过大(如上传一个4M以上的文件,返回一个4M以上的文件流时)此时需要考虑使用HttpWebRequest类进行处理,GET上传数据不能大于4M。
便基本上的httpClient功能是够用的。
我的这句话你要理解两个信息,一个是http请求(支持http1.1和http1.2),另一个是异步,它有自身的好处。
httpClient支持很多verb的,例如GET/POST等等,但其方法上对部分的verb进行了单独的成员方法封装,比如GETAsync()方法就是上传GET,而PostAsync()方法就是上传Post,类似的还有Delete/Put都是异步封装。但事实上有时我们还需要其他的动词请求时,可以考虑使用SendAsync()成员方法,这个方法中封装了一个HttpRequestMessage对象,请求前需要构造这个对象,而这个对象中有一个Method的属性可以支持Get/Put/Post/Delete/Options/Tract/Headrt等常规的动作之外,还可以构造一个自定义的动作。
而在具体的使用上来说,POST时可以查看PostAsync的重载方法,要知道这个的一个异步的方法以返回时结果其实是异步的HttpResponseMessage,也就是所谓的Task<HttpResponseMessage>,接收到的对象的Result属性就是HttpResponseMessage对象。而这个对象中的StatusCode可以帮你确定状态码(如200等),而Content你应该知道是什么东西了,其实就是返回的内容,其实是对应编码解析后的文本内容。
当然,如果你需要的是流的话,目前除GetStreamAsync之外还没有其他的办法,只能使用HttpWebRequest去处理了,毕竟HttpClient是针对http请求的一个轻量级框架,并没有完成所有的http请求的情况的!
比如你的业务是POST上一个值,返回一个文件,可以考虑使用Get上传一个指定的参数(处理到Uri中)使用GetStreamAsync方法,返回的是一个Task<Stream>,如果处理的数据较为复杂,或是Post上传的参数过大(如上传一个4M以上的文件,返回一个4M以上的文件流时)此时需要考虑使用HttpWebRequest类进行处理,GET上传数据不能大于4M。
便基本上的httpClient功能是够用的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询