2

Zendesk のチケット送信 API を使用しようとしていますが、そのドキュメントでは cURL で次の例を示しています。

curl https://{subdomain}.zendesk.com/api/v2/tickets.json \ -d '{"ticket": {"requester": {"name": "The Customer", "email": "thecustomer@domain.com"}, "subject": "My printer is on fire!", "comment": { "body": "The smoke is very colorful." }}}' \ -H "Content-Type: application/json" -v -u {email_address}:{password} -X POST

System.Net.Http ライブラリを使用して、この POST リクエストを作成しようとしています。

var httpClient = new HttpClient();
HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(model));
if (httpContent.Headers.Any(r => r.Key == "Content-Type"))
    httpContent.Headers.Remove("Content-Type");
httpContent.Headers.Add("Content-Type", "application/json");
httpContent.Headers.Add("Authorization", String.Format("Basic {0}", Convert.ToBase64String(Encoding.ASCII.GetBytes("{user}:{password}"))));
var httpResult = httpClient.PostAsync(WebConfigAppSettings.ZendeskTicket, httpContent);

Authorization ヘッダーをコンテンツに追加しようとすると、エラーが発生し続けます。HttpContent にはコンテンツ タイプ ヘッダーのみが含まれることになっていることがわかりました。

Content-Type ヘッダー、Authorization ヘッダーを設定し、System.Net.Http ライブラリを使用してボディに Json を含めることができる POST 要求を作成して送信するにはどうすればよいですか?

4

1 に答える 1

1

以下のコードを使用してリクエストを作成しました。

HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(new { ticket = model }));
if (httpContent.Headers.Any(r => r.Key == "Content-Type"))
    httpContent.Headers.Remove("Content-Type");
httpContent.Headers.Add("Content-Type", "application/json");
var httpRequest = new HttpRequestMessage()
{
    RequestUri = new Uri(WebConfigAppSettings.ZendeskTicket),
    Method = HttpMethod.Post,
    Content = httpContent
};
httpRequest.Headers.Add("Authorization", String.Format("Basic {0}", Convert.ToBase64String(Encoding.UTF8.GetBytes(@"{username}:{password}"))));
httpResult = httpClient.SendAsync(httpRequest);

基本的には、ボディの追加とヘッダーの設定を分けてコンテンツをビルドします。次に、認証ヘッダーをhttpRequestオブジェクトに追加しました。そのため、オブジェクトにコンテンツ ヘッダーを追加し、httpContentオブジェクトに認証ヘッダーを追加する必要がありましたhttpRequest

于 2015-06-25T12:42:16.783 に答える