先看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. Python网络编程(1)-socket

    我会在近期尽快更新好之前写的博客,会添加新的知识点和注意问题,排版和内容都会较之前有很大的改观,感谢大家一直的支持! 1. 客户端/服务器架构 客户端/服务器架构也称主从式架构,简称C/S架构,它是一 ...

  2. 使用nodejs搭建api的mock服务

    1. 介绍 公司的业务开发都是静态页面,开发前期总是避免不了获取api的问题.在vue中有一些mockjs的方案,方案都是注入性质的,和最终部署总是有差别,而且业务大部分还在zepto下,很难找到合适 ...

  3. js中checkbox的全选和反选的实现

    <head> <meta charset="utf-8"/> <script type="text/javascript"> ...

  4. Egret学习笔记 (Egret打飞机-4.添加主角飞机和实现飞行效果)

    今天继续写点击了开始之后,添加一个飞机到场景中,然后这个飞机的尾巴还在冒火的那种感觉 先拆解一下步骤 1.首先完成飞机容器的图片加载 2.然后把容器添加到场景中 3.然后实现动画 -首先,我们新建一个 ...

  5. 《android开发艺术探索》读书笔记(十)--Android的消息机制

    接上篇<android开发艺术探索>读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表 ...

  6. hihoCoder1310 岛屿 (dfs)

    思路:首先dfs求得所有联通块,再搜索的同时把每个联通块的坐标都保存下来,然后把每个联通块处理一下–首先得到某个联通块的最小横坐标和纵坐标,然后让每个坐标去减去这个横坐标和纵坐标.相当于使得所有联通块 ...

  7. ES6的介绍和常用语法

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 前言 ECMAScript 是 JS 的语言标准.而 ES6 是新的 J ...

  8. Redis笔记3-redis事务

    Redis的事务机制允许同时执行多条指令,它是原子性操作,事务中的命令要么全部执行,要么全部不执行,另外,事务中的所有指令都会被序列化,而且其开始执行过程中,不回被即时过来的指令所打断,其需要经历三个 ...

  9. 简化的CDN架构分析

    CDN架构的设计目标是通过复制系统资源(即Web服务器)的方式来获得高性能和高扩展性,为了能确保在海量内容下可以稳定提供高性能的服务.系统资源的复制可以在本地和地理两个尺度上进行.如果是本地复制则响应 ...

  10. 跨站请求伪造攻击 CSRF

    摘录: 1.跨站点请求伪造 首先,什么是跨站点请求伪造? 跨站点请求伪造-CSRF(Cross Site Request Forgery):是一种网络攻击方式. 说的白话一点就是,别的站点伪造你的请求 ...