先看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. Mybatis查询,resultMap="Map" 查询数据有空值,导致整个map为空的问题

    解决方法,不要使用Map接收,使用HashMap或者LinkHashMap,都可以. resultMap="Map" 替换为: resultMap="HashMap&qu ...

  2. mysql数据库外部无法访问

    有以下两种情况: 1.mysql未分配访问权限 格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码"; grant select, ...

  3. 《android开发艺术探索》读书笔记(十二)--Bitmap的加载和Cache

    接上篇<android开发艺术探索>读书笔记(十一)--Android的线程和线程池 No1: 目前比较常用的缓存策略是LruCache和DiskLruCache,LruCache常被用作 ...

  4. ACdream1032 Component 树形DP

    思路:dp[i][j]表示以i为根结点有j个连通节点的最小和, 当进行状态转移时需要利用01背包,节点u下面有多个子节点,每个子节点可以最多可以贡献cnt[v]个节点,cnt[v]表示以v为根结点的树 ...

  5. UVA1374 IDA*

    我刚开始的思路就是:用启发函数max * pow(2 , maxd - d) < n直接去判断,两个for循环往数组延伸,找到n为止,可是速度太慢.刘汝佳大哥说的直接使用新延伸出来的数,这样确实 ...

  6. HDU - 2614 dfs

    思路:记录当前用的最大时间即刚解决的问题花费的时间,下一个应该做的题的时间必须大于等于刚才的. AC代码 #include <cstdio> #include <cmath> ...

  7. UVA-12166 天平性质+字符处理

    这题思维难度很大,关键是总结这个性质. 1.天平性质:某个秤砣重量为w,高度为h,如果要让这个天平平衡并且以这个秤砣为基准,那么整个天平的总重量为w*(2^h) 2.利用这个性质:题目要求秤砣数量改变 ...

  8. AGC010 - B: Boxes

    原题链接 题意简述 给出一个由个数构成的环,每次可以选择一个位置并从这个数起顺时针依次对每个数-1,-2,-3,-,-n.问能否将所有数全变为0. 分析 考虑一次操作对环带来了什么影响. (在后加一个 ...

  9. 对于JAVA程序优化的一些想法,读书有感.治疗强迫症良药

    在深入了解Java虚拟机里读到:在try{}块里面执行代码,比if(x!=null)效率要高,前提是被catch的几率很低的情况下. 但是 在Effective Java里读到:因为异常机制的设计初衷 ...

  10. vscode格式化Vue出现的问题

    一.VSCode中使用vetur插件格式化vue文件时,js代码会自动加上冒号和分号 本来就是简写比较方便舒服,结果一个格式化回到解放前 最后找到问题原因: 首先,vetur默认设置是这个样的.也就是 ...