先看webapi提供的服务:

        [HttpPost]
public ResultBaseModel SiteList(SiteModel param)
{
ResultBaseModel resultModel = new ResultBaseModel(); var sites = new List<Site>(); sites.Add(new Site { SiteId = , Title = "百度", Uri = "www.baidu.com" });
sites.Add(new Site { SiteId = , Title = "博客园首页", Uri = "www.cnblogs.com" });
sites.Add(new Site { SiteId = , Title = "博问", Uri = "q.cnblogs.com" });
sites.Add(new Site { SiteId = , Title = "新闻", Uri = "news.cnblogs.com" });
sites.Add(new Site { SiteId = , Title = "招聘", Uri = "job.cnblogs.com" }); try
{ var result = (from Site site in sites
where site.SiteId > param.StartId
select site)
.Take(param.ItemCount)
.ToList();
resultModel.IsSuccess = true;
resultModel.Data = sites; }
catch (Exception ex)
{
resultModel.IsSuccess = false;
resultModel.Message = ex.Message;
} return resultModel;
}

客户端调用:

    var requestJson = JsonConvert.SerializeObject(new { StartId = , ItemCount =  });

             var url = "http://localhost:8084/api/CenterShedule/SiteList";
var responseJson = GetResponseWithNoContentPress(requestJson, url);
Console.WriteLine(responseJson);

通用的post方法:

         public static string GetResponseWithNoContentPress(string objStr, string url)
{
string result = "";
StreamReader reader = null;
System.IO.Stream stream = null;
WebResponse response = null;
HttpWebRequest request = null; try
{
byte[] byteArray = Encoding.UTF8.GetBytes(objStr);
request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/json; charset=urf-8";
request.Accept = "application/json";
request.ContentLength = byteArray.Length;
request.KeepAlive = false;
request.Method = "POST";
request.Timeout = ;
System.IO.Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, , byteArray.Length);
dataStream.Close();
response = request.GetResponse();
stream = response.GetResponseStream();
reader = new System.IO.StreamReader(stream, Encoding.UTF8); result = reader.ReadToEnd();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
if (reader != null)
{
reader.Close();
}
if (stream != null)
{
stream.Close();
}
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
request = null;
}
}
return result;
}
request.Accept = "application/json"; 这一句可以不用指定返回的类型,webapi自动返回json数据,可是我要返回xml数据怎么办?直接改:request.Accept = "application/xml";这时候请求会报错,报出服务器500错误。于是我改接口:
        [HttpPost]
public string SiteList(SiteModel param)
{
return "hello world";
}

此时返回来的结果如下:

此时,我就想为什么之前的接口,返回不了数据呢?想了下应该是返回的model无法序列化成xml格式,如何让系统帮助生成xml,使用了各种办法,还是返回服务器500错误,最后决定还是自己写个序列化的方法。在此先不提。

post请求还有一种简洁的写法:

           var requestJson = JsonConvert.SerializeObject(new { StartId = , ItemCount =  });

             HttpContent httpContent = new StringContent(requestJson);
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); var httpClient = new HttpClient(); var responseJson = httpClient.PostAsync("http://localhost:8084/api/CenterShedule/SiteList", httpContent)
.Result.Content.ReadAsStringAsync().Result;

顺便把get请求的总结下:

  /// <summary>
/// get请求,可以对请求头进行多项设置
/// </summary>
/// <param name="paramArray"></param>
/// <param name="url"></param>
/// <returns></returns>
public static string GetResponseByGetFull(Dictionary<string, string> paramArray, string url)
{
string responseJson = ""; var httpclient = HTTPHelper.HttpClient; url += BuildParam(paramArray);
var response = httpclient.GetAsync(url).Result;
if (response.IsSuccessStatusCode)
{
Stream myResponseStream = response.Content.ReadAsStreamAsync().Result;
StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
responseJson = myStreamReader.ReadToEnd();
myStreamReader.Close();
myResponseStream.Close();
} return responseJson;
}

HttpClient:

    public class HTTPHelper
{
private static readonly HttpClient HttpClient;
static HTTPHelper()
{
var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.None };
HttpClient = new HttpClient(handler); HttpClient.DefaultRequestHeaders.Accept.Clear();
HttpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
}
BuildParam:
        private static string BuildParam(Dictionary<string, string> paramArray)
{
string url = "";
if (paramArray != null && paramArray.Count > )
{
var parms = "";
foreach (var item in paramArray)
{
parms += string.Format("{0}={1}&", item.Key, item.Value);
}
if (parms != "")
{
parms = "?" + parms.TrimEnd('&');
}
url += parms; }
return url;
}
 

webapi下的web请求的更多相关文章

  1. 从Nginx的Web请求处理机制中剖析多进程、多线程、异步IO

    Nginx服务器web请求处理机制 从设计架构来说,Nginx服务器是与众不同的.不同之处一方面体现在它的模块化设计,另一方面,也是最重要的一方面,体现在它对客户端请求的处理机制上. Web服务器和客 ...

  2. WebAPI GET和POST请求的几种方(转发)

    WebAPI GET和POST请求的几种方式 GET请求 1.无参数get请求 一般get请求有两种写法,一种是$.get()   一种是$.ajax({type:"get"}), ...

  3. web请求报出 “超过了最大请求长度” 【注意:重启IIS】

    摘自:http://www.cnblogs.com/loalongblogs/archive/2012/10/16/2726372.html web请求报出 “超过了最大请求长度”   错误原因:as ...

  4. Django用户认证系统(二)Web请求中的认证

    在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...

  5. Web请求响应简单整理

      简单对Web请求响应如何处理进行的整理,难免有理解不到位,理解有偏差的地方,如有理解有误的地方,希望大牛批评指正. 1.Web开发的定义首先看看微软对Web开发的定义:Web开发是一个指代网页或网 ...

  6. Linux下查看Web服务器当前的并发连接数和TCP连接状态

    对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...

  7. python下的web服务器模块

    python下的web服务模块有三种: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler SimpleHTTPS ...

  8. Springboot中使用AOP统一处理Web请求日志

    title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...

  9. 与JavaWeb有关的故事(web请求与Java I/O)

    作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...

随机推荐

  1. 机器学习03:K近邻算法

    本文来自同步博客. P.S. 不知道怎么显示数学公式以及排版文章.所以如果觉得文章下面格式乱的话请自行跳转到上述链接.后续我将不再对数学公式进行截图,毕竟行内公式截图的话排版会很乱.看原博客地址会有更 ...

  2. VUE学习笔记之vue cli 构建项目

    一.环境搭建: 1.安装node.js 从node.js官网下载并安装node,安装过程很简单,一路"下一步"就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd), ...

  3. jdbc 报错解决办法

    刚刚看到一个童鞋出现了这个问题 其实这个问题很好解决 在工程中创建一个lib目录: 然后讲mysql包复制进去 然后对着包点击右键 build path就可以了 最后面再次运行就可以了 jar包地址下 ...

  4. 大数相加(类似杭电acm1002)

    /*输入两个非常大的整数(完全超出了int.long的表示范围),这个整数的长度可能超过100位,计算并输出这两个数相加的结果.*/ //自己用题目所给的案例测试,输出是正确的,也能输出正确的结果,不 ...

  5. 地牢逃脱 (BFS)

    题意:给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指 ...

  6. python-scrapy的编码问题

    在学习scrapy中,遇到编码问题还是很头痛的问题的.由于对于语言的对不熟悉,加上不会思考的去解决问题.这样盲目的实践似乎就是在浪费时间. 用心思考一下是非常重要的一个过程,在没有办法前进的时候,先学 ...

  7. win10安装mongodb及配置 和 mongodb的基本使用(node环境)

    mongodb安装 下载地址: https://www.mongodb.com/download-center 下载后,我们点击mongodb-win32-x86_64-2008plus-ssl-3. ...

  8. 遍历对象属性(for in、Object.keys、Object.getOwnProperty)

    js中几种遍历对象的方法,包括for in.Object.keys.Object.getOwnProperty,它们在使用场景方面各有不同. for in 主要用于遍历对象的可枚举属性,包括自有属性. ...

  9. 安装CentOS7

    安装环境:虚拟机*1 使用软件:CentOS7镜像*1 安装过程: 虚拟机配置步骤(主要部分): 1.安装为Linux:CentOS 64位 2.分配1G内存(若需求大可根据实际情况分配) 3.分配4 ...

  10. 2015最全iOS开发自学视频资料(基础+实战)

    最全的iOS自学视频,包括c,objective-c,UI等等,没有你找不到的,只有你学不会的,只要你想学,这里都有你所需要的. 推荐教程点这里:http://www.mobiletrain.org/ ...