2

問題はRESTfulサービスのDynamics CRM 365データにアクセスしています。Webサービス用のサービスルートURLを使用してCRM Dynamics 365データにアクセス

Dynamics CRMデータをRESTfulサービスで使用したいと考えています。このRESTfulサービスは、モバイルアプリケーションをCRMデータアクセスに接続するためにWCFサービスで使用されます。

私は以下の参照を行ってきましたが、それらのいずれかが私のために働くようには見えません。ここでは、Azureの使用を避けようとします。上記要件の

、私は参照の下方に設けられCODEと試みた: Ref 1: Microsoft CRM Web API Query Data Sample (CS)、 それはまた、添付のスクリーンショット

Error ScreenShot

エラーゾーンとしてエラーを与えている:でProgram.csファイル - 結果を取得しようとすると、次のコード行にエラーがスローされます。

HttpResponseMessage response = SendAsJsonAsync(httpClient, HttpMethod.Post, 
      "accounts", account1).Result; 

文献1は、どのように私はClientIdをRedirectUrlを取得することが出来るのですか?よりも正しい方法であるとのリンクは上で共有した場合

答えて

0

これは、CRMに対して認証するために、Microsoftの例を使用してコードです:

public class CrmConnector 
{ 
    private const string ApiVersion = "v8.2"; 

    public static HttpClient Client { get; set; } 

    public CrmConnector(FileConfiguration config) 
    { 
     if (Client == null) 
     { 
      Task.WaitAll(Task.Run(async() => await ConnectToCRM(config))); 
     } 
    } 

    /// <summary> 
    /// Obtains the connection information from the application's configuration file, then 
    /// uses this info to connect to the specified CRM service. 
    /// </summary> 
    protected virtual async Task ConnectToCRM(Configuration config) 
    { 
     Authentication auth = new Authentication(config); 
     Client = new HttpClient(auth.ClientHandler, true); 
     Client.BaseAddress = new Uri($"{config.ServiceUrl}api/data/{ApiVersion}/"); 
     Client.Timeout = new TimeSpan(0, 2, 0); 
     Client.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); 
     Client.DefaultRequestHeaders.Add("OData-Version", "4.0"); 
     Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 
    } 
} 

設定ファイルを渡すには、次のようになります。

<?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=ORG; Username=USER; Password=PASS; Domain=DOMAIN" /> 
    <add name="CrmOnline" connectionString="Url=https://mydomain.crm.dynamics.com/; [email protected]; Password=password" /> 
    </connectionStrings> 

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

    <!--Active Directory application registration. --> 
    <!--These are dummy values and should be replaced with your actual app registration values.--> 
    <add key="ClientId" value="CLIENTID" /> 
    <!--<add key="RedirectUrl" value="http://localhost/SdkSample" />--> 

    <!-- 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:\Temp\crmsample.exe.config"/> 
    </appSettings> 

</configuration> 

あなたが開発者からあなたのclientIdを得ることができますあなたの組織のリソースredirectUrlはオプションで、次のようにオブジェクトを使用できます。

CrmConnector CrmConnector = new CrmConnector(new FileConfiguration(null)); 

そしてリクエストにする:応答を読み取るには

public const string OdataAnnotationAll = "odata.include-annotations=*"; 

protected virtual async Task<HttpResponseMessage> RequestCRMAsync(HttpMethod method, string query, string pag, bool annotations) 
{ 
    HttpRequestMessage request = new HttpRequestMessage(method, query); 
    request.Headers.Add("Prefer", "odata.maxpagesize=" + pag); 

    if (annotations) 
    { 
     request.Headers.Add("Prefer", OdataAnnotationAll); 
    } 

    return await CrmConnector.Client.SendAsync(request); 
} 

を:

using Newtonsoft.Json; 

public virtual async Task<JObject> RequestCRM(HttpMethod method, string query, string pag, bool annotations) 
{ 
    JObject responseObject = new JObject(); 
    HttpResponseMessage response = await RequestCRMAsync(method, query, pag, annotations); 

    if (response.StatusCode == HttpStatusCode.OK || response.StatusCode == HttpStatusCode.NoContent) 
    { 
     responseObject = JsonConvert.DeserializeObject<JObject>(response.Content.ReadAsStringAsync().Result); 
    } 
    else 
    { 
     throw new CrmHttpResponseException(response.Content); 
    } 

    return responseObject; 
} 

あなたが体内でのparamsを送信する必要が作成または更新作っている場合は、次の

JObject data = new JObject(); 
data.Add("firstname", "Sxntk"); 
data.Add("lastname", "IG"); 
data.Add("annualincome", "1000000000"); 
request.Content = new StringContent(data.ToString(), Encoding.UTF8, "application/json"); 

作成または更新の場合は、このヘッダーにguidが入ります。

protected virtual string GetGuidFromResponse(HttpResponseMessage response) 
{ 
    string RegexGuid = @"(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}"; 

    // Get the url -> http://~/entity(guid) 
    var urlHeader = response.Headers.FirstOrDefault(x => x.Key == "OData-EntityId"); 

    //Type of this is KeyPairValue 
    if (urlHeader.Value == null) 
    { 
     return null; 
    } 

    // Get the guid form url 
    return Regex.Matches(urlHeader.Value.FirstOrDefault(), RegexGuid)?[0].Value; 
} 

更新httpメソッドはPOSTではなくPATCHです。

マイクロソフトヘルパーのクラスは、認証、構成、例外、およびCrmConnectorが変更されています。

関連する問題