Динамика 365 (Online) crm Код состояния веб-страницы WebAPI (401) ожидался в ответе

Я пытаюсь создать собственное приложение C # (с использованием WebAPI), которое было зарегистрировано в Azure AD. Это приложение должно будет создавать определенные объекты в crm, но это почти не имеет значения для моего вопроса.

Я попытался использовать пример, предоставленный MSDN, и, хотя он не генерирует никаких исключений во время выполнения, появляется следующее сообщение:

Microsoft.IdentityModel.Clients.ActiveDirectory Error: 4 : 07/06/2018 15:39:31:  - AuthenticationParameters: System.ArgumentException: Unauthorized Http Status Code (401) was expected in the response

Parameter name: response

Проверяя запрос / ответ со скрипачом, я заметил, что все отправлено по http и что ответ 502 - плохой шлюз. Поместите это здесь, если это поможет.

Я вернулся в MSDN, чтобы проверить, что означает этот код ошибки, и я получил следующее с этой веб-страницы: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/webapi/compose-http-requests -Handle-ошибка

401 Unauthorized Ожидайте это для следующих типов ошибок:

  • BadAuthTicket
  • ExpiredAuthTicket
  • InsufficientAuthTicket
  • InvalidAuthTicket
  • Inwliduserauth
  • MissingCrmAuthenticationToken
  • MissingCrmAuthenticationTokenOrganizationName
  • RequestIsNotAuthenticated
  • TamperedAuthTicket
  • Не авторизованный доступ
  • UnManagedInvalidSecurityPrincipal

Ошибка SEEMS - это плохой токен, но я могу ошибаться, поскольку на данный момент я только начинаю в этой сфере.

Ниже приведен код внутри основного файла .cs

using System;

using Microsoft.Crm.Sdk.Samples.HelperCode;
using System.Net.Http;
using System.Net.Http.Headers;

namespace Test
{
class Program
{

    private HttpClient httpClient;

    static void Main(string[] args)
    {

        Program app = new Program();
        try
        {
            app.ConnectToCRM(args);
        }
        catch (System.Exception ex)
        {
            DisplayException(ex);
        }
        finally
        {
            if (app.httpClient != null)
            { app.httpClient.Dispose(); }
            Console.WriteLine("Press <Enter> to exit the program.");
            Console.ReadLine();
        }
    }


    private void ConnectToCRM(String[] cmdargs)
    {
        Configuration config = null;
        if (cmdargs.Length > 0)
            config = new FileConfiguration(cmdargs[0]);
        else
            config = new FileConfiguration("default");
        Authentication auth = new Authentication(config);
        httpClient = new HttpClient(auth.ClientHandler, true);
        httpClient.BaseAddress = new Uri(config.ServiceUrl + "api/data/v9.0/");
        httpClient.Timeout = new TimeSpan(0, 2, 0);
        httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
        httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    }

    private static void DisplayException(Exception ex)
    {
        Console.WriteLine("The application terminated with an error.");
        Console.WriteLine(ex.Message);
        while (ex.InnerException != null)
        {
            Console.WriteLine("	* {0}", ex.InnerException.Message);
            ex = ex.InnerException;
        }
    }

}
}

И вот конфигурационный файл, используемый для соединения:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>

  <connectionStrings>
    <clear />

    <!-- When providing a password, make sure to set the app.config file's security so that only you can read it. -->
    <add name="default" connectionString="Url=https://<tenant>.api.crm11.dynamics.com; Username=user; Password=pass" />
  </connectionStrings>

  <appSettings>
    <!--For information on how to register an app and obtain the ClientId and RedirectUrl
        values see msdn.microsoft.com/.../mt149065 -->

    <!--Active Directory application registration. -->
    <!--These are dummy values and should be replaced with your actual app registration values.-->
    <add key="ClientId" value="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
    <add key="RedirectUrl" value="https://<tenant>.crm11.dynamics.com" />

    <!-- Use an alternate configuration file for connection string and setting values. This optional setting
    enables use of an app.config file shared among multiple applications. If the specified file does
    not exist, this setting is ignored.-->
    <add key="AlternateConfig" value="C:Tempcrmsample.exe.config" />
  </appSettings>

</configuration>

Поля были заполнены информацией о заполнителе по очевидным причинам :)

Еще одна проблема может заключаться в том, что мой линейный администратор разрешил приложение с использованием Azure AD, так как он имеет полный контроль, и я пытаюсь авторизовать приложение, используя мои учетные данные, но я почти на 100% уверен, что это не так, как изменение полей имени пользователя и пароля не имело никакого значения, какую ошибку я получал.

Не могли бы вы сообщить мне, чего я не вижу? Я подозреваю, что это что-то простое, но я читал через документы MSDN последние 2 дня и, похоже, не разбираюсь в моей проблеме?

c#,dynamics-crm,token,http-status-code-401,

1

Ответов: 0

Динамика 365 (Online) crm Код состояния веб-страницы WebAPI (401) ожидался в ответе

Я пытаюсь создать собственное приложение C # (с использованием WebAPI), которое было зарегистрировано в Azure AD. Это приложение должно будет создавать определенные объекты в crm, но это почти не имеет значения для моего вопроса.

Я попытался использовать пример, предоставленный MSDN, и, хотя он не генерирует никаких исключений во время выполнения, появляется следующее сообщение:

Microsoft.IdentityModel.Clients.ActiveDirectory Error: 4 : 07/06/2018 15:39:31:  - AuthenticationParameters: System.ArgumentException: Unauthorized Http Status Code (401) was expected in the response

Parameter name: response

Проверяя запрос / ответ со скрипачом, я заметил, что все отправлено по http и что ответ 502 - плохой шлюз. Поместите это здесь, если это поможет.

Я вернулся в MSDN, чтобы проверить, что означает этот код ошибки, и я получил следующее с этой веб-страницы: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/webapi/compose-http-requests -Handle-ошибка

401 Unauthorized Ожидайте это для следующих типов ошибок:

  • BadAuthTicket
  • ExpiredAuthTicket
  • InsufficientAuthTicket
  • InvalidAuthTicket
  • Inwliduserauth
  • MissingCrmAuthenticationToken
  • MissingCrmAuthenticationTokenOrganizationName
  • RequestIsNotAuthenticated
  • TamperedAuthTicket
  • Не авторизованный доступ
  • UnManagedInvalidSecurityPrincipal

Ошибка SEEMS - это плохой токен, но я могу ошибаться, поскольку на данный момент я только начинаю в этой сфере.

Ниже приведен код внутри основного файла .cs

using System;

using Microsoft.Crm.Sdk.Samples.HelperCode;
using System.Net.Http;
using System.Net.Http.Headers;

namespace Test
{
class Program
{

    private HttpClient httpClient;

    static void Main(string[] args)
    {

        Program app = new Program();
        try
        {
            app.ConnectToCRM(args);
        }
        catch (System.Exception ex)
        {
            DisplayException(ex);
        }
        finally
        {
            if (app.httpClient != null)
            { app.httpClient.Dispose(); }
            Console.WriteLine("Press <Enter> to exit the program.");
            Console.ReadLine();
        }
    }


    private void ConnectToCRM(String[] cmdargs)
    {
        Configuration config = null;
        if (cmdargs.Length > 0)
            config = new FileConfiguration(cmdargs[0]);
        else
            config = new FileConfiguration("default");
        Authentication auth = new Authentication(config);
        httpClient = new HttpClient(auth.ClientHandler, true);
        httpClient.BaseAddress = new Uri(config.ServiceUrl + "api/data/v9.0/");
        httpClient.Timeout = new TimeSpan(0, 2, 0);
        httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0");
        httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0");
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    }

    private static void DisplayException(Exception ex)
    {
        Console.WriteLine("The application terminated with an error.");
        Console.WriteLine(ex.Message);
        while (ex.InnerException != null)
        {
            Console.WriteLine("	* {0}", ex.InnerException.Message);
            ex = ex.InnerException;
        }
    }

}
}

И вот конфигурационный файл, используемый для соединения:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>

  <connectionStrings>
    <clear />

    <!-- When providing a password, make sure to set the app.config file's security so that only you can read it. -->
    <add name="default" connectionString="Url=https://<tenant>.api.crm11.dynamics.com; Username=user; Password=pass" />
  </connectionStrings>

  <appSettings>
    <!--For information on how to register an app and obtain the ClientId and RedirectUrl
        values see msdn.microsoft.com/.../mt149065 -->

    <!--Active Directory application registration. -->
    <!--These are dummy values and should be replaced with your actual app registration values.-->
    <add key="ClientId" value="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" />
    <add key="RedirectUrl" value="https://<tenant>.crm11.dynamics.com" />

    <!-- Use an alternate configuration file for connection string and setting values. This optional setting
    enables use of an app.config file shared among multiple applications. If the specified file does
    not exist, this setting is ignored.-->
    <add key="AlternateConfig" value="C:Tempcrmsample.exe.config" />
  </appSettings>

</configuration>

Поля были заполнены информацией о заполнителе по очевидным причинам :)

Еще одна проблема может заключаться в том, что мой линейный администратор разрешил приложение с использованием Azure AD, так как он имеет полный контроль, и я пытаюсь авторизовать приложение, используя мои учетные данные, но я почти на 100% уверен, что это не так, как изменение полей имени пользователя и пароля не имело никакого значения, какую ошибку я получал.

Не могли бы вы сообщить мне, чего я не вижу? Я подозреваю, что это что-то простое, но я читал через документы MSDN последние 2 дня и, похоже, не разбираюсь в моей проблеме?

01C #, динамика-УРК, маркер, HTTP-статус-код-401,
Похожие вопросы