C# Imgur API版本3上传示例?

C# Imgur API版本3上传示例?,c#,post,httpresponse,image-uploading,imgur,C#,Post,Httpresponse,Image Uploading,Imgur,我正在尝试将此功能添加到我正在开发的C#Windows应用程序中,用于将图像上传到Imgur 不幸的是,它必须是Imgur,因为该站点是必需的 问题是,我能找到的任何C#示例代码都很旧,似乎无法与他们的版本3 API一起使用 所以我想知道是否有人在这方面有专业知识可以帮助我 我更喜欢使用OAuth上传,而不是匿名选项,但如果需要,可以使用匿名选项作为示例 编辑: 我特别不明白的一点是,如何在桌面应用程序中执行授权步骤。授权步骤要求打开一个网页,询问用户是否允许应用程序使用其数据 如何为基于桌面的

我正在尝试将此功能添加到我正在开发的C#Windows应用程序中,用于将图像上传到Imgur

不幸的是,它必须是Imgur,因为该站点是必需的

问题是,我能找到的任何C#示例代码都很旧,似乎无法与他们的版本3 API一起使用

所以我想知道是否有人在这方面有专业知识可以帮助我

我更喜欢使用OAuth上传,而不是匿名选项,但如果需要,可以使用匿名选项作为示例

编辑:

我特别不明白的一点是,如何在桌面应用程序中执行授权步骤。授权步骤要求打开一个网页,询问用户是否允许应用程序使用其数据


如何为基于桌面的应用程序执行此操作?

开始之前,您需要注册应用程序以接收客户端ID和客户端密码。我猜你已经意识到了。详细信息可在官方网站上找到

关于身份验证,您是对的,用户必须访问网页并获取并授权您的应用程序。您可以在应用程序中嵌入一些Webbrowser控件,也可以简单地指示用户浏览网页

这里有一些未经测试的代码,只需稍加修改即可工作

class Program
    {
        const string ClientId = "abcdef123";
        const string ClientSecret = "Secret";

        static void Main(string[] args)
        {
            string Pin = GetPin(ClientId, ClientSecret);
            string Tokens = GetToken(ClientId, ClientSecret, Pin);

            // Updoad Images or whatever :)
        }

        public static string GetPin(string clientId, string clientSecret)
        {
            string OAuthUrlTemplate = "https://api.imgur.com/oauth2/authorize?client_id={0}&response_type={1}&state={2}";
            string RequestUrl = String.Format(OAuthUrlTemplate, clientId, "pin", "whatever");
            string Pin = String.Empty;

            // Promt the user to browse to that URL or show the Webpage in your application
            // ... 

            return Pin;
        }

        public static ImgurToken GetToken(string clientId, string clientSecret, string pin)
        {
            string Url = "https://api.imgur.com/oauth2/token/";
            string DataTemplate = "client_id={0}&client_secret={1}&grant_type=pin&pin={2}";
            string Data = String.Format(DataTemplate, clientId, clientSecret, pin);

            using(WebClient Client = new WebClient())
            {
                string ApiResponse = Client.UploadString(Url, Data);

                // Use some random JSON Parser, you´ll get access_token and refresh_token
                var Deserializer = new JavaScriptSerializer();
                var Response = Deserializer.DeserializeObject(ApiResponse) as Dictionary<string, object>;

                return new ImgurToken()
                {
                    AccessToken = Convert.ToString(Response["access_token"]),
                    RefreshToken = Convert.ToString(Response["refresh_token"])
                };
            }
        }
    }

    public class ImgurToken
    {
        public string AccessToken { get; set; }
        public string RefreshToken { get; set; }
    }
类程序
{
常量字符串ClientId=“abcdef123”;
常量字符串ClientSecret=“Secret”;
静态void Main(字符串[]参数)
{
字符串Pin=GetPin(ClientId,ClientSecret);
字符串标记=GetToken(ClientId、ClientSecret、Pin);
//Updoad图像或其他内容:)
}
公共静态字符串GetPin(字符串clientId,字符串clientSecret)
{
字符串OAuthUrlTemplate=”https://api.imgur.com/oauth2/authorize?client_id={0}&response_type={1}&state={2}”;
stringrequesturl=string.Format(OAuthUrlTemplate,clientId,“pin”,“任意”);
string Pin=string.Empty;
//提示用户浏览到该URL或在应用程序中显示网页
// ... 
回位销;
}
公共静态ImgurToken GetToken(字符串clientId、字符串clientSecret、字符串pin)
{
字符串Url=”https://api.imgur.com/oauth2/token/";
string DataTemplate=“client_id={0}&client_secret={1}&grant_type=pin&pin={2}”;
string Data=string.Format(DataTemplate、clientId、clientSecret、pin);
使用(WebClient=newWebClient())
{
string ApiResponse=Client.UploadString(Url,数据);
//使用一些随机JSON解析器,您将获得访问令牌和刷新令牌
var反序列化器=新的JavaScriptSerializer();
var Response=反序列化器。反序列化对象(ApiResponse)作为字典;
返回新的ImgurToken()
{
AccessToken=Convert.ToString(响应[“访问令牌]),
RefreshToken=Convert.ToString(响应[“刷新令牌”])
};
}
}
}
公共类ImgurToken
{
公共字符串AccessToken{get;set;}
公共字符串刷新标记{get;set;}
}

我的应用程序目前使用Imgur API 2.0,我也对一些示例感兴趣!您希望如何上传?外部URL、base64编码的图像内容或多部分上载?@flup我不知道OP。但这里有base64。您是否也可以提供一个为bounty pleasepin响应类型上载位图的示例不久将被弃用,我不确定是否仍然可以使用胖客户端。