我是初学者,正在创建winform应用程序。在其中我必须使用API进行简单CRUD操作。我的客户与我共享了API,并要求以JSON形式发送数据。
API:http :
//blabla.com/blabla/api/login-valida
关键字:“ HelloWorld”
值:{“电子邮件”:“ user@gmail.com”,“密码”:“ 123456”,“时间”:“ 2015-09-22 10:15:20”}
响应:Login_id
如何将数据转换为JSON,如何使用POST方法调用API并获得响应?
编辑 在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)未找到。”
您可以看一下以下文档教程:
但是,作为答案,我将在此处分享一个简短的分步指南,介绍如何以Windows形式调用和使用Web API:
Microsoft.AspNet.WebApi.Client
NuGet软件包(Web API客户端库)。打开工具菜单→NuGet程序包管理器→程序包管理器控制台→在程序包管理器控制台窗口中,键入以下命令:
Install-Package Microsoft.AspNet.WebApi.Client
您可以通过右键单击项目并选择“管理NuGet软件包”来安装软件包。
设置HttpClient- 创建的实例HttpClient
并设置其BaseAddress
和DefaultRequestHeaders
。例如:
// In the class
static HttpClient client = new HttpClient();
// Put the following code where you want to initialize the class
// It can be the static constructor or a one-time initializer
client.BaseAddress = new Uri(“http://localhost:4354/api/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue(“application/json”));
发送请求 -要发送请求,可以使用以下方法HttpClient
:
GetAsync
,,GetStringAsync``GetByteArrayAsync``GetStreamAsync
PostAsync``PostAsJsonAsync``PostAsXmlAsync
PutAsync``PutAsJsonAsync``PutAsXmlAsync
DeleteAsync
Send
注意: 请记住,要为这些方法设置请求的URL,因为在定义时已指定了基本URL
client
,则此处为这些方法设置了路径,路由值和查询字符串,例如:
// Assuming http://localhost:4354/api/ as BaseAddress
var response = await client.GetAsync("products");
要么
// Assuming http://localhost:4354/api/ as BaseAddress
var product = new Product() { Name = "P1", Price = 100, Category = "C1" };
var response = await client.PostAsJsonAsync("products", product);
要获得响应,如果您使用了类似的方法GetStringAsync
,那么您会将响应作为字符串使用,并且足以解析该响应。如果响应是您知道的Json内容,则可以轻松地使用package
JsonConvert
类对其Newtonsoft.Json
进行解析。例如:
// Assuming http://localhost:4354/api/ as BaseAddress
var response = await client.GetStringAsync("product");
var data = JsonConvert.DeserializeObject<List<Product>>(response);
this.productBindingSource.DataSource = data;
如果你已经使用的方法,如GetAsync
或PostAsJsonAsync
与你有HttpResponseMessage
那么你可以使用ReadAsAsync
,ReadAsByteArrayAsync
,ReadAsStreamAsync
,`ReadAsStringAsync,例如:
// Assuming http://localhost:4354/api/ as BaseAddress
var response = await client.GetAsync("products");
var data = await response.Content.ReadAsAsync<IEnumerable<Product>>();
this.productBindingSource.DataSource = data;
性能提示
HttpClient
是一种类型,只能创建一次然后共享。因此,不要在每次要使用它时都将其放在using块中。而是,创建类的实例并通过静态成员共享它。要了解有关此内容的更多信息,请查看不正确的实例化反模式设计技巧
IProductServieClient
接口,然后在实现中将所有WEB API逻辑放入ProductWebAPIClientService
要实现的内部,以包含与WEB API交互的代码。您的应用程序应依赖IProductServieClient
。(SOLID原则,依赖倒置)。这可能是一个新问题,所以我会马上说出来。这是我第一次创建IDisposable类,我想确保我正确创建了我的类,正确调用了它,并正确处理了它。谢谢! 这就是我所说的。
我在各个地方看过ConfigureAwait(包括SO问题),以下是我的结论: 配置等待(true):在运行wait之前在同一线程上运行其余代码。 配置等待(false):在运行等待代码的同一线程上运行其余代码。 如果wait后面跟着访问UI的代码,则该任务应附加。否则,由于另一个线程访问UI元素,将发生InvalidoperationException。 我的问题是: 我的结论正确吗? 配置等待
从理论上说,WebService可以被任何支持SOAP协议的语言调用。在Visual Studio中使用C#调用WebService是在所有语言中最容易实现的(VB.net的调用方法类似,也同样很简单)。 新建一个Visual Studio工程,并在引用Web服务的对话框中输入如下的URL,并输入Web引用名为“WebService”: http://localhost:8080/axis2/se
问题内容: 我想在SQL Server中创建调用函数,该函数接收两个参数并返回一个整数。当我调用存储过程时,我使用以下代码: 在这种情况下,我有一个由存储过程返回的表。如果我想使用返回标量值的函数而不是存储过程,会有什么变化? 问题答案: 您不能直接调用该函数,只是,( 查询 ),并且是允许的。由于您已经接触过存储过程,因此为什么不创建一个具有该功能的过程呢? 在您的C#代码中,您可以使用命令对象
本文向大家介绍C# WinForm调用Shell_NotifyIcon的示例代码,包括了C# WinForm调用Shell_NotifyIcon的示例代码的使用技巧和注意事项,需要的朋友参考一下 用法示例: 以上就是C# WinForm调用Shell_NotifyIcon的示例代码的详细内容,更多关于C# WinForm调用Shell_NotifyIcon的资料请关注呐喊教程其它相关文章!
今天我为我的项目做了一个小测试——目标是:实现将文件以。我当前的/文件如下所示。 我成功地将上述内容转换为