我是一个初学者,正在创建winform应用程序。在这个应用程序中,我必须使用API进行简单的CRUD操作。我的客户已经与我共享了API,并要求以JSON格式发送数据。
API:http://blabla.com/blabla/api/login-valida
关键词:“你好世界”
值:{“电子邮件”:“user@gmail.com“,“密码”:“123456”、“时间”:“2015年9月22日10时15分20秒”}
响应:登录ID
我如何将数据转换为JSON,使用POST方法调用API并获得响应?
EDIT在stackoverflow的某个地方我找到了这个解决方案
public static void POST(string url, string jsonContent)
{
url="blabla.com/api/blala" + url;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(baseURL);
request.Method = "POST";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(jsonContent);
request.ContentLength = byteArray.Length;
request.ContentType = @"application/json";
using (Stream dataStream = request.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
long length = 0;
try
{
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
length = response.ContentLength;
}
}
catch
{
throw;
}
}
//on my login button click
private void btnLogin_Click(object sender, EventArgs e)
{
CallAPI.POST("login-validate", "{ \"email\":" + txtUserName.Text + " ,\"password\":" + txtPassword.Text + ",\"time\": " + DateTime.Now.ToString("yyyy-MM-dd h:mm tt") + "}");
}
我收到异常,显示“远程服务器返回错误:(404)页面未找到。
5条答案
按热度按时间8yparm6h1#
你可以看看下面的文档教程:
但作为答案,在这里我将分享一个快速和简短的一步一步的指南,关于如何调用和使用Windows窗体中的Web API:
1.安装软件包-安装
Microsoft.AspNet.WebApi.Client
NuGet软件包(Web API客户端库)。打开工具菜单→ NuGet包管理器→包管理器控制台→在包管理器控制台窗口中,键入以下命令:
您可以通过右键单击项目并选择管理NuGet包来安装包。
1.设置HttpClient-创建
HttpClient
的示例并设置其BaseAddress
和DefaultRequestHeaders
。例如:*发送请求-要发送请求,可以使用
HttpClient
的以下方法:DeleteAsync
Send
**注意:**要为方法设置请求的URL,请记住,由于您在定义
client
时已经指定了基URL,因此在这里对于这些方法,只需传递路径、路由值和查询字符串,例如:或
*获得响应
如果你使用了
GetStringAsync
这样的方法来获取响应,那么你就有了字符串形式的响应,解析响应就足够了,如果响应是你知道的Json内容,你可以很容易地使用Newtonsoft.Json
包的JsonConvert
类来解析它,例如:如果您使用了
GetAsync
或PostAsJsonAsync
等方法,并且有一个HttpResponseMessage
,则可以使用ReadAsAsync
、ReadAsByteArrayAsync
、ReadAsStreamAsync
、'ReadAsStringAsync,例如:性能提示
HttpClient
是一个创建一次然后共享的类型。因此,不要试图在每次使用它时都将其放入using块中。相反,创建该类的示例并通过静态成员共享它。要了解更多信息,请查看Improper Instantiation antipattern设计提示
IProductServieClient
接口,然后将所有WEB API逻辑作为实现放入ProductWebAPIClientService
中,您实现该接口以包含与WEB API交互的代码。您的应用程序应该依赖IProductServieClient
。(SOLID原则,依赖倒置)。wgxvkvu92#
只需使用以下库。
https://www.nuget.org/packages/RestSharp
GitHub项目:https://github.com/restsharp/RestSharp
样本代码:
wkftcu5l3#
ohfgkhjo4#
验证码:
svgewumm5#
下面是另一个使用在线REST服务(https://northwind.vercel.app)的示例,该服务允许与Northwind API交互。
此示例使用
HttpClient
和JsonConvert
获取或发送数据。下面是一个非常简单的示例:1.安装Newtonsoft.Json nuget包,并在表单中添加以下using语句:
1.在类级别定义HttpClient的示例:
1.发送GET请求,例如获取所有数据的列表:
您还可以使用Get的其他重载,如GetStringAsync、GetStreamAsync等。但GetAsync是一个更通用的方法,它还允许您获取状态代码。
1.要发送POST请求,例如发布新数据:
要了解更多信息并查看一些最佳实践或查看不使用JsonConvert的示例,请参阅我的其他帖子。