web-dev-qa-db-ja.com

PATCHリクエストを正しく送信する方法

これをRESTエンドポイントと呼ぶ必要があります

PATCH https://graph.windows.net/contoso.onmicrosoft.com/users/[email protected]?api-version=1.5 HTTP/1.1

{
    "<extensionPropertyName>": <value>
}

こちらのドキュメントを参照してください: https://msdn.Microsoft.com/en-us/library/Azure/dn720459.aspx

ユーザーの1つのプロパティの値を設定する次のコードがあります。

public async Task<ActionResult> AddExtensionPropertyValueToUser()
        {
            Uri serviceRoot = new Uri(azureAdGraphApiEndPoint);
            var token = await GetAppTokenAsync();
            string requestUrl = "https://graph.windows.net/mysaasapp.onmicrosoft.com/users/[email protected]?api-version=1.5";

            HttpClient hc = new HttpClient();
                hc.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

            var method = new HttpMethod("PATCH");

            var request = new HttpRequestMessage(method, requestUrl)
            {
                Content =  new StringContent("{ \"extension_33e037a7b1aa42ab96936c22d01ca338_Compania\": \"Empresa1\" }", Encoding.UTF8, "application/json")
            };

            HttpResponseMessage hrm = await hc.GetAsync(new Uri(requestUrl));
            if (hrm.IsSuccessStatusCode)
            {
                string jsonresult = await hrm.Content.ReadAsStringAsync();
                return View("TestRestCall", new SuccessViewModel
                {
                    Name = "The Title",
                    Message = "The message",
                    JSON = jsonresult.ToJson()
                });
            }
            else
            {
                return View();
            }
        }

ただし、204(コンテンツなし)で応答する代わりに、ユーザープロパティ全体で応答するため、残りのCALLに問題があると思います

http://screencast.com/t/LmoNswKIf2

10
Luis Valencia

私はあなたの問題はこの行だと思います:

HttpResponseMessage hrm = await hc.GetAsync(new Uri(requestUrl));

これにより、指定したURLにHTTP GETリクエストが送信されます。この場合、ユーザーは「[email protected]」を参照します。そのため、応答で返されたユーザーのすべてのプロパティが表示されます。

あなたがやりたいのは、あなたが作成したPATCHHttpRequestMessageを送信することだと思います。これを行うには、SendAsyncメソッドを使用し、パラメーターとしてHttpRequestMessageを指定する必要があります。上記の行を次のように変更すると、プロパティ値を設定して、204 NoContent応答が得られると思います。

HttpResponseMessage hrm = await hc.SendAsync(request);
14
Jimaco Brannian