Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpWebResponse 401错误未经授权_C#_Api_Httpwebrequest_Token_Httpwebresponse - Fatal编程技术网

C# HttpWebResponse 401错误未经授权

C# HttpWebResponse 401错误未经授权,c#,api,httpwebrequest,token,httpwebresponse,C#,Api,Httpwebrequest,Token,Httpwebresponse,我当前在尝试调用API时遇到HttpWebRequest/Response问题 API使用JSON/Ajax进行调用,但我需要通过HttpWebRequest/Response进行调用,我不完全理解,我认为我传递了错误的访问令牌 以下是我当前的代码,我从教程中获得: byte[] buffer = Encoding.ASCII.GetBytes("username=User&password=Password"); HttpWebRequest WebR

我当前在尝试调用API时遇到HttpWebRequest/Response问题

API使用JSON/Ajax进行调用,但我需要通过HttpWebRequest/Response进行调用,我不完全理解,我认为我传递了错误的访问令牌

以下是我当前的代码,我从教程中获得:

        byte[] buffer = Encoding.ASCII.GetBytes("username=User&password=Password");

        HttpWebRequest WebReq =(HttpWebRequest)WebRequest.Create("http://api40.maildirect.se/User/Authorize");

        WebReq.Method = "POST";
        WebReq.ContentType = "application/x-www-form-urlencoded";
        WebReq.ContentLength = buffer.Length;

        Stream PostData = WebReq.GetRequestStream();

        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();

        var status = WebResp.StatusCode; (returns OK)

        Stream _Answer = WebResp.GetResponseStream();
        StreamReader Answer = new StreamReader(_Answer);

        //Here I try to make another request, do I need to make another instance?
        WebReq = (HttpWebRequest)WebRequest.Create("http://api40.maildirect.se/Contacts?&select=ContactId,FirstName,LastName");
        WebReq.Method = "GET";
        WebReq.ContentType = "text/json; charset=utf-8";
        WebReq.Headers.Add("Authorization", Answer.ReadToEnd());

        HttpWebResponse WebResp2 = (HttpWebResponse)WebReq.GetResponse();

         ^ This is where it breaks because I'm not authorized.
API中唯一有用的文档是,我需要在进行其他调用时传递访问令牌,但我怀疑我传递了错误的令牌

提前谢谢


deSex

我将HttpWebResponse作为令牌发送,而不是StreamReader生成的字符串。我用这个字符串值创建了一个名为token的新变量,并按原样将其添加到头授权中

        byte[] buffer = Encoding.ASCII.GetBytes("username=Username&password=Password");
        HttpWebRequest WebReq = (HttpWebRequest) WebRequest.Create("http://api40.maildirect.se/User/Authorize");

        WebReq.Method = "POST";
        WebReq.ContentType = "application/x-www-form-urlencoded";
        WebReq.ContentLength = buffer.Length;

        Stream PostData = WebReq.GetRequestStream();

        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();

        HttpWebResponse WebResp = (HttpWebResponse) WebReq.GetResponse();

        //This token variable was something I missed creating and it also had to get the " removed to work properly.
        var token = new StreamReader(WebResp.GetResponseStream()).ReadToEnd().Replace("\"", "");

        WebReq = (HttpWebRequest) WebRequest.Create("http://api40.maildirect.se/Contacts");

        WebReq.Method = "GET";
        WebReq.ContentType = "application/json; charset=utf-8";

        // This is where another part of the problem was, sent in the wrong type to the header, but when I replaced it with the token variable it worked like a charm :)
        //WebReq.Headers.Add("Authorization", WebResp.ToString());

        WebReq.Headers.Add("Authorization", token);

        HttpWebResponse WebResp2 = (HttpWebResponse) WebReq.GetResponse();

仅仅因为WebResp.StatusCode返回了状态200并不一定意味着您的身份验证工作正常。您需要检查响应内容。我可以访问CanRead,还有什么需要的吗?您已经有了回答中的流,其中包含什么?我可以访问CanRead和CanTimeout,长度和位置抛出一个系统。但不支持例外。但是,base中的identity和_identity为null,但我没有那么丰富的经验,所以我不知道这是否重要。