使用桌面应用程序的c#API客户端

使用桌面应用程序的c#API客户端,c#,api,rest,desktop-application,C#,Api,Rest,Desktop Application,我必须创建一个客户端应用程序来连接API以发布和获取信息, 我从拥有API的公司获得的信息是: xxxxx的API详细信息 集成:yyyxxx API URL:https://api.xyz.us/v123/ 应用程序密钥:XXXXX 12312XXXXX2123123123XXXXX 密钥:11111111111 XXXXXXXXXX 我想使用c#或其他语言创建客户端,我找不到任何桌面应用程序的c#示例,我找到了一个c#控制台基本示例,就像没有人将API与c#一起使用一样 客户机是否可以使

我必须创建一个客户端应用程序来连接API以发布和获取信息,
我从拥有API的公司获得的信息是:

xxxxx的API详细信息
集成:yyyxxx
API URL:https://api.xyz.us/v123/ 
应用程序密钥:XXXXX 12312XXXXX2123123123XXXXX
密钥:11111111111 XXXXXXXXXX
我想使用c#或其他语言创建客户端,我找不到任何桌面应用程序的c#示例,我找到了一个c#控制台基本示例,就像没有人将API与c#一起使用一样

客户机是否可以使用C#桌面应用程序连接到API

或者我可以用什么来完成这项任务


谢谢大家的帮助。我在邮递员身上找到了答案, 首先,我找到了一个C#桌面客户端应用程序示例。 此示例的问题在于它没有使用API密钥和密钥。 我找到了许多关于如何添加API密钥和密钥的答案

但在“代码”一节中,对邮递员起作用的是

请求标头[“授权”]=“基本Zmrioda0NJMXMMTGWMWUZYWFKYTK4NJM2MJCYOTK3MDOWYTU0N2I2NZLINWRKMJLIN2I4NTFLMDBKY2NJQZNQ5OTIXZL”

完整的c#代码是:


下面是基于OP答案片段的
HttpClient
示例

使用System.Threading.Tasks;
使用System.Net.Http;
使用系统文本;
使用System.Net.Http.Header;
公共类RESTClient
{
私有只读HttpClient客户端=新HttpClient();
公共RESTClient(字符串基地址)
{
client.BaseAddress=新Uri(BaseAddress);
}
public void SetAuthHeader(字符串参数)
{
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“基本”,参数);
}
公共异步任务MakeRequestAsync(HttpMethod方法,字符串路径,字符串postContent=“”)
{
尝试
{
使用(HttpContent=newstringcontent(postContent,Encoding.UTF8,“application/json”))
使用(HttpRequestMessage请求=新HttpRequestMessage(方法,路径))
{
if(method==HttpMethod.Post | | method==HttpMethod.Put)request.Content=Content;
使用(HttpResponseMessage response=await client.SendAsync(请求,HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false))
{
response.EnsureSuccessStatusCode();
返回wait response.Content.ReadAsStringAsync().configurewait(false);
}
}
}
捕获(例外情况除外)
{
返回“{\”errorMessages\”:[\”“+ex.Message+“\”],\“errors\”:{}”;
}
}
}
使用示例(WinForms)

私有RESTClient RESTClient;
私有void Form1\u加载(对象发送方、事件参数e)
{
restClient=新的restClient(“https://myapi.url/api");
SetAuthHeader(“ioda0njmxmmtgwmwuzywkfkytk4njm2mjcyotk3mdowytu0n2i2nzlinwrkmjlin2i4ntflmdbky2njqznzq5otixyzzl”);
}
私有异步无效按钮1\u单击(对象发送方,事件参数e)
{
//得到
字符串getJsonResult=await restClient.MakeRequestAsync(HttpMethod.Get,“path/to/method”);
//职位
字符串postJsonResult=wait restClient.MakeRequestAsync(HttpMethod.Post,“path/to/method”,“data\:\“Some Request data\”);
//在此处理数据
}

寻找HttpClient,它是.NET的HTTP客户端。在控制台或桌面应用程序中,这两种方式没有区别。您可以使用相同的示例。感谢您的快速响应,任何使用API密钥和密钥的示例?HttpWebRequest与HttpClient之间的区别是什么???
HttpClient
在.NET内核中速度更快,并且具有本机
async
API。而且是跨平台课程
HttpWebRequest
是Microsoft为新开发而弃用的类。谢谢,您能为GET和POST编写httpclient吗,当前的代码用于GET,但我还没有用于POST。让我知道。你想发布什么样的数据
x-form-url-encoded
或json字符串还是什么?什么样的桌面应用程序,WinForms?json字符串,桌面WinForms。使用httpClient,
using System;
using System.IO;
using System.Net;
using System.Text;

namespace restClient_0
{

    public enum httpVerb
    {
        GET,
        POST,
        PUT,
        DELETE
    }

    class RESTClient
    {
        public string endPoint { get; set; }
        public httpVerb httpMethod { get; set; }

        public RESTClient()
        {
            endPoint = "";
            httpMethod = httpVerb.GET;
        }

        public string makeRequest()
        {

            string strResponseValue = string.Empty;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(endPoint);

            request.Method = httpMethod.ToString();
            request.Headers["Authorization"] = "Basic iODA0NjMxMTgwMWUzYWFkYTk4NjM2MjcyOTk3MDowYTU0N2I2NzliNWRkMjliN2I4NTFlMDBkY2Y2NjQzNzQ5OTIxYzZl";

            HttpWebResponse response = null;

            try
            {
                response = (HttpWebResponse)request.GetResponse();


                //Proecess the resppnse stream... (could be JSON, XML or HTML etc..._

                using (Stream responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        using (StreamReader reader = new StreamReader(responseStream))
                        {
                            strResponseValue = reader.ReadToEnd();
                        }
                    }
                }
            }
            catch(Exception ex)
            {
                strResponseValue = "{\"errorMessages\":[\"" + ex.Message.ToString() + "\"],\"errors\":{}}";
            }
            finally
            {
                if (response != null)
                {
                    ((IDisposable)response).Dispose();
                }
            }

            return strResponseValue;
        }
    }
}