c# - 如何发送一个http basic auth post?

标签 c# asp.net http post

我的任务是使用基本身份验证创建一个 http 帖子。 我正在用 C# 开发一个 asp.net MVC 应用程序。

我也得到了这个例子。

{
POST /v2/token_endpoint HTTP/1.1
Authorization: Basic Y2xpZW50X2lkOmNsaWVudF9zZWNyZXQ=
Accept: application/json
Content-Type: application/x-www-form-urlencoded
User-Agent: Java/1.6.0_33
Host: api.freeagent.com
Connection: close
Content-Length: 127

grant_type=authorization_code&code=12P3AsFZXwXjd7SLOE1dsaX8oCgix&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Foauth
}

我的问题是如何在 C# 中对此进行编码? 如果需要更多信息,请提前致谢

编辑:我取得了一些进展,但我还没有添加 grant_type

public void AccessToken(string code)
    {
        string url = @"https://api.freeagent.com/v2/token_endpoint";
        WebClient client = new WebClient();
        string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(ApiKey + ":" + ApiSecret));
        client.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
        client.Headers[HttpRequestHeader.Accept] = "application/json";
        client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        client.Headers[HttpRequestHeader.UserAgent] = "Java/1.6.0_33";
        client.Headers[HttpRequestHeader.Host] = "api.freeagent.com";
        client.Headers[HttpRequestHeader.Connection] = "close";
        client.Headers["grant_type"] = "authorization_code";

        var result = client.DownloadString(url);
    }

那么我该如何添加:grant_type=authorization_code&code=12P3AsFZXwXjd7SLOE1dsaX8oCgix&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Foauth 到帖子中?

最佳答案

您可以在这里找到两个如何使用 WebRequest 和 WebClient 类发出基本身份验证请求的示例:

http://grahamrhay.wordpress.com/2011/08/22/making-a-post-request-in-c-with-basic-authentication/ http://anishshenoy57.wordpress.com/2013/01/22/basic-http-authentication-using-c/

基本上basic auth就是Base64(username:password),所以很容易实现。

更新1

这是一个基于您的方法的示例:

public void AccessToken(string code)
{
    string url = @"https://api.freeagent.com/v2/token_endpoint";
    WebClient client = new WebClient();
    string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(ApiKey + ":" + ApiSecret));
    client.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
    client.Headers[HttpRequestHeader.Accept] = "application/json";
    client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
    client.Headers[HttpRequestHeader.UserAgent] = "Java/1.6.0_33";
    client.Headers[HttpRequestHeader.Host] = "api.freeagent.com";
    client.Headers[HttpRequestHeader.Connection] = "close";
    client.Headers["grant_type"] = "authorization_code";

    string data = string.Format(
        "grant_type=authorization_code&code={0}&redirect_uri=http%3A%2F%2Flocalhost%3A8080",
        code);
    var result = client.UploadString(url, data);
}

唯一不同的是WebClient中的调用方式。 DownloadString 将执行 GET 请求,但对于 POST 您需要使用 UploadString方法

关于c# - 如何发送一个http basic auth post?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21066622/

相关文章:

javascript while循环正确迭代但具有相同逻辑的for循环不是,在具有整数值和其中一些空值的数组上

c# - 为什么部分方法只能有 void 返回类型?

php - 托管环境之间的 HTTP 重定向行为不一致

reactjs - 如何忽略通过 HTTP 进行更改的客户端的 websocket 事件?

html - Firefox 不显示内联 pdf

c# - NHibernate/MySQL 字符串连接

c# - 计算几个函数的平均函数

c# - 在 Photoshop 中调整图像对比度的最佳方法是什么

javascript - 使用 JavaScript 向 AjaxControlToolkit.HTMLEditor 插入值

c# - 如何访问源错误、源文件和异常的行号以在自定义错误页面中使用?