簡體   English   中英

C#-設置HttpClient標頭以將數據發布到Azure REST API

[英]C# - Set HttpClient Headers to POST data to Azure REST API

我正在嘗試將一些數據發布到Azure REST API。 我在Postman中定義了一個有效的請求。 現在,在我的C#代碼中,我想使用HttpClient而不是幫助程序庫。 為了做到這一點,我目前有:

try
{
  var json = @"{
    '@search.action':'upload',
    'id':'abcdef',
    'text':'this is a long blob of text'
  }";

  using (var client = new HttpClient())
  {
    var requestUri = $"https://my-search-service.search.windows.net/indexes/my-index/docs/index?api-version=2019-05-06";

    // Here is my problem
    client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Add("api-key", myKey);
    client.DefaultRequestHeaders.Add("Content-Type", "application/json");

    using (var content = new StringContent(json, Encoding.UTF8, "application/json")
    {
      using (var request = Task.Run(async() => await client.PostAsync(requestUri, content)))
      {
        request.Wait();
        using (var response = request.Result)
        {
        }
      }
    }
  }
}
catch (Exception exc)
{
  Console.WriteLine(exc.Message);
}

當我運行此命令時,將拋出InvalidOperationException

Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

我不明白我做錯了什么。 如何使用C#中的HttpClient將數據發布到Azure REST API?

謝謝!

內容類型是內容的標頭,而不是請求的標頭,這就是失敗的原因。 您還可以在創建請求的內容本身時設置內容類型(請注意,代碼段在兩個位置(用於Accept和Content-Type標頭)添加了“ application / json”)

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT

嘗試這個:

content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

你看到這個芭蕾舞裙了嗎?

初始化HttpCLient

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:64195/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));

發布您的對象

Product product = new Product
{
            Name = "Gizmo",
            Price = 100,
            Category = "Widgets"
};    
var url = await CreateProductAsync(product);

static async Task<Uri> CreateProductAsync(Product product)
{
    HttpResponseMessage response = await client.PostAsJsonAsync(
        "api/products", product);
    response.EnsureSuccessStatusCode();

    // return URI of the created resource.
    return response.Headers.Location;
}

如果要添加任何標題,請使用此

 var apiClient = new HttpClient()
                    {
                      BaseAddress = new Uri(apiBaseURL)
                    };

var request = new HttpRequestMessage(HttpMethod.Post, "/api/controller/method");
request.Headers.Add("Accept", "application/json");
request.Headers.Add("api-key", mykey);
request.Content = new StringContent(json, Encoding.UTF8, "application/json");

var response = apiClient.SendAsync(request).Result;
response.EnsureSuccessStatusCode();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM