0

我对 WebApi 和 WebRequests 和其他东西完全陌生。
经过数小时的谷歌搜索,最后,我设法使用 C# 和 HttpWebRequest 进行 POST。
当我使用 Visual Studio 在调试模式下执行 HttpWebRequest 时,我没有遇到任何异常。
我的应用程序在我接受的情况下工作,我将数据发送到 webApi 服务器并取回数据。为了确定我的应用程序如何与 WebApi 服务器通信,我启动了 Fiddler Web Debugger。
在 POST 到 WebApi 期间,Fiddler 追逐 401 错误

 {"Message":"Authorization has been denied for this request."}

在调试器中一步一步我资助以下代码行执行 401 错误

        HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
        wr.Credentials = new NetworkCredential(username, password);
        wr.Method = "POST";
        wr.ContentType = "application/json";
        byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(body);
        wr.ContentLength = byteArray.Length;
        using (System.IO.Stream dataStream = wr.GetRequestStream())
        {
            dataStream.Write(byteArray, 0, byteArray.Length); //After this line of code Fidler Chace HTTP 401
        }

稍后在代码中,当我执行 wr.GetResponse() 时,我确实得到了 200OK 状态。

我的问题是:
我是否需要重新设计我的代码以避免在 Fiddler 中出现这个错误?
除了使用 GetRequestStream() 之外,还有其他方法可以用 jsonSting 填充 HttpWebRequest 吗?

4

1 回答 1

1

如果您的服务启用了 Windows 身份验证,那么在 Fiddler 中,您可以选择使用您登录的凭据自动进行身份验证的选项,方法是转到此处:

Composer 选项卡 -> 选项选项卡 -> 自动验证

另外,为什么不使用 System.Net.Http 中的 HttpClient?...它有一个更好、更简单的编程模型...例如:

HttpClientHandler handler = new HttpClientHandler();
handler.UseDefaultCredentials = true;
HttpClient client = new HttpClient(handler);
client.BaseAddress = new Uri("http://localhost:9095/");

HttpResponseMessage response = client.PostAsJsonAsync<Customer>("api/values", cust).Result;
于 2013-05-23T20:06:56.497 回答