【问题标题】:Sending credentials with HttpWebRequest使用 HttpWebRequest 发送凭据
【发布时间】:2013-10-25 00:38:07
【问题描述】:

我目前正在尝试使用来自Wunderlist 的 API 在 Windows Phone 8 上创建待办事项列表。但是,我无法在 POST 请求中传递我的凭据。这是我的代码:

public async Task<System.IO.TextReader> DoRequestAsync(WebRequest request)
    {
            var task = Task.Factory.FromAsync((cb, o) => ((HttpWebRequest)o).BeginGetResponse(cb, o), res =>
                    ((HttpWebRequest)res.AsyncState).EndGetResponse(res), request);
            var result = await task;
            var response = result;
            var stream = response.GetResponseStream();
            var sr = new System.IO.StreamReader(stream);
        return sr;
    }

还有:

public async Task<System.IO.TextReader> Login(string email, string password)
    {
        //User Credentials
        WebClient client = new WebClient();
        var parms = new Dictionary<string, string>();
        parms.Add(email, password);


        //Request
        HttpWebRequest request = HttpWebRequest.CreateHttp(API_URL + "/login");
        request.AllowReadStreamBuffering = true;
        request.Method = HttpMethod.Post;
        // This doesn't seem to work
        request.Credentials = new NetworkCredential(email, password);
        var tr = await DoRequestAsync(request);
        return tr;
    }
    private string DictToString(Dictionary<string, string> dict)
    {
        StringBuilder builder = new StringBuilder();
        foreach(KeyValuePair<string, string> kvp in dict)
        {
            builder.Append(kvp.Key + "=" + kvp.Value + "&");
        }
        return builder.ToString();

    }

感谢帮助

【问题讨论】:

  • 你为什么不用HttpClient
  • 另外,您需要对您的值进行 URL 编码。
  • 看起来 HttpClient 更容易。我想我会试试的,谢谢!

标签: c# json windows-phone-8 httpwebrequest wunderlist


【解决方案1】:

删除带有 .credentials 的字符串,因为 NetworkCredential 用于 NTLM/Kerberos,这里是通常 POST 的 api

发送请求前添加:

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write("email=" + HttpUtility.UrlEncode(email));
    writer.Write("&password=" + HttpUtility.UrlEncode(password));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多