当前位置: 首页 > 面试题库 >

使用C#.net在Winform中调用和使用Web API

苍意智
2023-03-14
问题内容

我是初学者,正在创建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)未找到。”


问题答案:

您可以看一下以下文档教程:

  • 在ASP.NET Web API 2中从.NET客户端调用Web API

但是,作为答案,我将在此处分享一个简短的分步指南,介绍如何以Windows形式调用和使用Web API:

  1. 安装软件包 -安装Microsoft.AspNet.WebApi.ClientNuGet软件包(Web API客户端库)。

打开工具菜单→NuGet程序包管理器→程序包管理器控制台→在程序包管理器控制台窗口中,键入以下命令:

    Install-Package Microsoft.AspNet.WebApi.Client

您可以通过右键单击项目并选择“管理NuGet软件包”来安装软件包。

  1. 设置HttpClient- 创建的实例HttpClient并设置其BaseAddressDefaultRequestHeaders。例如:

    // 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”));

  2. 发送请求 -要发送请求,可以使用以下方法HttpClient

    • GET: ,GetAsync,,GetStringAsync``GetByteArrayAsync``GetStreamAsync
    • POST: ,,PostAsync``PostAsJsonAsync``PostAsXmlAsync
    • PUT: ,,PutAsync``PutAsJsonAsync``PutAsXmlAsync
    • Delete: DeleteAsync
    • 另一个HTTP方法: 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);
  1. 得到回应

要获得响应,如果您使用了类似的方法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;

如果你已经使用的方法,如GetAsyncPostAsJsonAsync与你有HttpResponseMessage那么你可以使用ReadAsAsyncReadAsByteArrayAsyncReadAsStreamAsync,`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块中。而是,创建类的实例并通过静态成员共享它。要了解有关此内容的更多信息,请查看不正确的实例化反模式

设计技巧

  • 尽量避免将与Web API相关的代码与您的应用程序逻辑混合在一起。例如,假设您有一个产品Web API服务。然后要使用它,首先定义一个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的资料请关注呐喊教程其它相关文章!

  • 今天我为我的项目做了一个小测试——目标是:实现将文件以。我当前的/文件如下所示。 我成功地将上述内容转换为