应用场景
应用程序编程接口(application programming interface,简称:api),是服务方定制开发一些预先定义的函数方法,并提供访问的方式及规则。访问 api 的开发人员无需理解其内部工作机制,只根据服务方提供的说明及规则,提交参数数据,并获取有需要的处理结果。
web api 是 web 服务器和 web 浏览器之间的应用程序处理接口。我们常见的模式是访问 web api url 地址,post 或 get 所需要的参数数据,并获取 json 、xml或其它指定格式的处理结果。
范例运行环境
操作系统: windows server 2019 datacenter
.net版本: .netframework4.0 或以上
开发工具:vs2019 c#
webservice 类
设计
webservice 类的 getresponseresult 方法提供了访问 web api url 的能力,方法返回字符串(即api返回的处理结果),另外webservice 类还提供了 errormessage 属性,通过访问此属性是否为空以判断方法是否正确返回了处理结果,getresponseresult方法的 使用说明见如下表格:
| 序号 | 参数名 | 类型 | 说明 |
|---|---|---|---|
| 1 | url | string | 要访问的url地址 |
| 2 | encoding | system.text.encoding | 字符编码格式 |
| 3 | method | string | 提交的方法类型,如 "post","get" |
| 4 | postdata | string | 提交的数据包 |
| 5 | headers | string[] | 传递请求头的字符串数组,如: string[] headers = new string[] {"key1:value1","key2:value2" }; 其中每一项的关键名和关键值用冒号分隔 |
| 6 | contenttype | string | 内容类型,默认为 contenttype= "application/x-www-form-urlencoded" |
实现
实现代码如下:
public sealed class webservice
{
public string errormessage = "";
public string getresponseresult(string url, system.text.encoding encoding, string method, string postdata)
{
return getresponseresult(url,encoding,method,postdata,null);
}
public string getresponseresult(string url, system.text.encoding encoding, string method, string postdata,string[] headers,string contenttype= "application/x-www-form-urlencoded")
{
method = method.toupper();
system.net.servicepointmanager.securityprotocol = system.net.securityprotocoltype.tls | system.net.securityprotocoltype.tls11 | system.net.securityprotocoltype.tls12;
if (method == "get")
{
try
{
webrequest request2 = webrequest.create(@url);
request2.method = method;
webresponse response2 = request2.getresponse();
stream stream = response2.getresponsestream();
streamreader reader = new streamreader(stream, encoding);
string content = reader.readtoend();
return content;
}
catch (exception ex)
{
errormessage = ex.message;
return "";
}
}
stream outstream = null;
stream instream = null;
streamreader sr = null;
httpwebresponse response = null;
httpwebrequest request = null;
byte[] data = encoding.getbytes(postdata);
// 准备请求...
try
{
// 设置参数
request = webrequest.create(url) as httpwebrequest;
cookiecontainer cookiecontainer = new cookiecontainer();
request.cookiecontainer = cookiecontainer;
request.allowautoredirect = true;
request.method = method;
request.timeout = 1000000;
if (headers != null)
{
for(int i = 0; i < headers.getlength(0); i++)
{
if (headers[i].split(':').length <2)
{
continue;
}
if (headers[i].split(':').length > 1) {
if (headers[i].split(':')[0] == "host") {
request.host = headers[i].split(':')[1];
continue;
}else if (headers[i].split(':')[0] == "content-type")
{
request.contenttype = headers[i].split(':')[1];
continue;
}
}
request.headers.add(headers[i]);
}
}
request.contenttype = contenttype;
request.contentlength = data.length;
outstream = request.getrequeststream();
outstream.write(data, 0, data.length);
outstream.close();
//发送请求并获取相应回应数据
response = request.getresponse() as httpwebresponse;
instream = response.getresponsestream();
sr = new streamreader(instream, encoding);
string content = sr.readtoend();
sr.close();
sr.dispose();
return content;
}
catch (exception ex)
{
errormessage = ex.message;
return "";
}
}//get response result
}调用
调用示例代码如下:
string content = "{\"key1\": 1,\"key2\": \"value2\"}";
string apiurl = "https://api.t.com/test.aspx";
webservice ws = new webservice();
string resultstr = ws.getresponseresult(settingurl, encoding.utf8, "post", content);
if(errormessage!=""){
response.write("访问没有成功,错误信息:"+errormessage);
}else{
response.write(resultstr);
}其它
我们在 webservice 类里创建了另一个实用方法:downloadfile,即提供对应的下载地址可以指定下载到本地文件,方法返回字符串(为空表示下载成功,不为空则显示错误信息)方法的使用说明见如下表格:
| 序号 | 参数名 | 类型 | 说明 |
|---|---|---|---|
| 1 | url | string | 要下载的url地址 |
| 2 | localfile | string | 要保存的本地完整路径地址 |
实现代码如下:
public string downloadfile(string url, string localfile)
{
string pathurl = url;
system.net.httpwebrequest request = null;
system.net.httpwebresponse response = null;
//请求网络路径地址
request = (system.net.httpwebrequest)system.net.webrequest.create(pathurl);
request.timeout = 5000; // 超时时间
//获得请求结果
try
{
response = (system.net.httpwebresponse)request.getresponse();
stream stream = response.getresponsestream();
//先创建文件
stream sos = new system.io.filestream(localfile, system.io.filemode.create);
byte[] img = new byte[1024];
int total = stream.read(img, 0, img.length);
while (total > 0)
{
//之后再输出内容
sos.write(img, 0, total);
total = stream.read(img, 0, img.length);
}
stream.close();
stream.dispose();
sos.close();
sos.dispose();
return "";
}
catch (exception e)
{
return e.message;
}
}到此这篇关于c#实现访问web api url提交数据并获取处理结果的文章就介绍到这了,更多相关c#访问web api url数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论