webapi下的web请求
先看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请求的更多相关文章
- 从Nginx的Web请求处理机制中剖析多进程、多线程、异步IO
Nginx服务器web请求处理机制 从设计架构来说,Nginx服务器是与众不同的.不同之处一方面体现在它的模块化设计,另一方面,也是最重要的一方面,体现在它对客户端请求的处理机制上. Web服务器和客 ...
- WebAPI GET和POST请求的几种方(转发)
WebAPI GET和POST请求的几种方式 GET请求 1.无参数get请求 一般get请求有两种写法,一种是$.get() 一种是$.ajax({type:"get"}), ...
- web请求报出 “超过了最大请求长度” 【注意:重启IIS】
摘自:http://www.cnblogs.com/loalongblogs/archive/2012/10/16/2726372.html web请求报出 “超过了最大请求长度” 错误原因:as ...
- Django用户认证系统(二)Web请求中的认证
在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authe ...
- Web请求响应简单整理
简单对Web请求响应如何处理进行的整理,难免有理解不到位,理解有偏差的地方,如有理解有误的地方,希望大牛批评指正. 1.Web开发的定义首先看看微软对Web开发的定义:Web开发是一个指代网页或网 ...
- Linux下查看Web服务器当前的并发连接数和TCP连接状态
对于web服务器(Nginx.Apache等)来说,并发连接数是一个比较重要的参数,下面就通过netstat命令和awk来查看web服务器的并发连接数以及TCP连接状态. $ netstat -n | ...
- python下的web服务器模块
python下的web服务模块有三种: BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler SimpleHTTPS ...
- Springboot中使用AOP统一处理Web请求日志
title: Springboot中使用AOP统一处理Web请求日志 date: 2017-04-26 16:30:48 tags: ['Spring Boot','AOP'] categories: ...
- 与JavaWeb有关的故事(web请求与Java I/O)
作为一名后端屌丝程序员,对算法.并发.性能乐此不疲.但是,随着年龄和阅历的增加,显然叶落而不知秋的心态是不太能混了.尤其是,某T面试官在明知我是后端,且明确表示对HTTP协议不太熟的情况下,强行让我解 ...
随机推荐
- MyEclipse出现红色感叹号解决办法
今天在做数据库连接练习的时候自己创建的工程突然出现了一个红色的感叹号,然后运行自己写的代码的时候出现找不到主类的错误!!! 我还以为是自己不小心写错了,然后让编译器自动生成代码也出现了一样的问题... ...
- 批量修改git仓库地址脚本
前言 公司的代码都存放在自己搭建的gitlab上面.之前由于老板升级gitlab.导致下面有个叫做"api"的groups无法访问.通过无所不能的谷歌才知道.在gitlab在某 ...
- mysql3 - 常规数据检索、常见操作与函数
一.常规数据检索 二.常见操作与函数
- 初识vue——语法初解
这次我们按照官网上的教程对vue的语法进行一个初步的了解: 一.声明式渲染 Vue.js的核心是一个允许采用简洁的模板语法来声明式的将数据渲染仅DOM的系统: 1.我们在HelloWorld里面输入下 ...
- 关于微信分享到朋友圈(Thinkphp框架下实现)
PHP部分 扩展类代码部分: <?php namespace Think; class JsSdk { private $appId; private $appSecre ...
- 前端js,后台python实现RSA非对称加密
先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...
- 关于 target="_blank"漏洞的分析
创建: 于 八月 30, 2016 关于 target="_blank"漏洞的分析 一.漏洞详情:首先攻击者能够将链接(指向攻击者自己控制的页面的,该被控页面的js脚本可以对母页 ...
- caffe︱cifar-10数据集quick模型的官方案例
准备拿几个caffe官方案例用来练习,就看到了caffe中的官方案例有cifar-10数据集.于是练习了一下,在CPU情况下构建quick模型.主要参考博客:liumaolincycle的博客 配置: ...
- R语言︱异常值检验、离群点分析、异常值处理
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:异常值处理一般分为以下几个步骤:异常 ...
- 拼接SQL语句缺少“break”
1.错误描述 [ERROR:]2015-07-20 16:42:21,734 [插入失败] org.hibernate.exception.SQLGrammarException: error exe ...