2016-03-10 7 views
0

Я получаю ошибку 401, которую я не ожидаю. Я на 100% уверен, что пароль и usernamne верны. Когда я пробую это на почтальоне, он работает, и я получаю данные, которые я ожидаю. Но в этом коде метод .downloadstring() возвращает ошибку 401. Я создал новую учетную запись урожая и попытался добраться до нее с тем же кодом, просто изменив пароль и имя пользователя, и я получил данные API, которые я хотел. Есть ли другая причина, то неправильный пароль или имя пользователя ошибка 401 может быть кэширована?Очень странная ошибка 401?

public List<Project> GetAllProjects() 
{ 
    uri = "https://bruh.harvestapp.com/projects"; 
    jsonPath = Path.Combine(HostingEnvironment.MapPath("~/App_Data"), "projects.json"); 

    using (WebClient webClient = new WebClient()) 
    { 
     webClient.Headers[HttpRequestHeader.ContentType] = "application/json"; 
     webClient.Headers[HttpRequestHeader.Accept] = "application/json"; 
     webClient.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword)); 

     string response = webClient.DownloadString(uri); 

     projectsList = JsonConvert.DeserializeObject<List<Wrapper>>(response).Select(p => p.project).ToList(); 
    } 

    return projectsList; 
} 
+0

Иам используя урожай апи –

+1

Вы говорите, что «на Postman, работает». Позвольте мне усомниться в этом. Используете ли вы Fiddler для проверки того, что запросы на 100% одинаковы? Я думаю, что настоящая проблема заключается в заголовках запросов. –

+0

У вас возникли проблемы с авторизацией. Вы проверили, в каком формате ** HARVEST-API ** принимает заголовок. Или вы отправляете правильный токен (например, имя пользователя: пароль) –

ответ

0

Согласно this C# образца кода от урожая, есть несколько вещей, которые должны быть изменены:

static void Main(string[] args) 
{ 
    HttpWebRequest request; 
    HttpWebResponse response = null; 
    StreamReader reader; 
    StringBuilder sbSource; 
    // 1. Set some variables specific to your account. 
    string uri = "https://yoursubdomain.harvestapp.com/projects"; 
    string username="[email protected]"; 
    string password="yourharvestpassword"; 
    string usernamePassword = username + ":" + password; 

    ServicePointManager.ServerCertificateValidationCallback = Validator; 

try 
    { 
    request = WebRequest.Create(uri) as HttpWebRequest; 
    request.MaximumAutomaticRedirections = 1; 
    request.AllowAutoRedirect = true; 

    // 2. It's important that both the Accept and ContentType headers are 
    // set in order for this to be interpreted as an API request. 
    request.Accept = "application/xml"; 
    request.ContentType = "application/xml"; 
    request.UserAgent = "harvest_api_sample.cs"; 
    // 3. Add the Basic Authentication header with username/password string. 
    request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(usernamePassword))); 

    using (response = request.GetResponse() as HttpWebResponse) 
    { 
     if (request.HaveResponse == true && response != null) 
     { 
      reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); 
      sbSource = new StringBuilder(reader.ReadToEnd()); 
      // 4. Print out the XML of all projects for this account. 
      Console.WriteLine(sbSource.ToString()); 
     } 
    } 
    }