Asp.net-Mvc

HttpClient 傳遞多個簡單參數

  • October 30, 2020

我正在嘗試POST從一個controller到另一個controller。兩者controller都來自不同的項目。一個項目用於模擬表示層(我將這裡稱為測試項目)。

從測試項目中,我嘗試將 2 個簡單string參數傳遞給另一個我將呼叫該過程的控制器。

var values = new List<KeyValuePair<string, string>>();
values.Add(new KeyValuePair<string, string>("id", param.Id.Value));
values.Add(new KeyValuePair<string, string>("type", param.Type.Value));
var content = new FormUrlEncodedContent(values);
using (var client = new HttpClient())
{
      client.BaseAddress = new Uri(url);
      client.DefaultRequestHeaders.Clear();
      client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("nl-NL"));

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

      string token = param.token.Value;
      client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

      var response = client.PostAsync("/api/Process/Product", content).Result;

      if (response.IsSuccessStatusCode)
      {
          var result = response.Content.ReadAsStringAsync().Result;
          return Request.CreateResponse(HttpStatusCode.OK, result);
      }

      return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "fail");
}

在過程控制器中,我試圖像這樣接收它:

[HttpPost]
public HttpResponseMessage Product(string id, string type)
{
   return null;
}

但它從來沒有達到這個controller。我總是收到“未找到狀態程式碼”。

那麼我怎樣才能傳遞 2 個簡單的參數HttpClient()呢?

對於簡單的類型參數,使用 Get 而不是 Post。

   using (var client = new HttpClient())
   {
       BaseAddress = new Uri(url);
       client.BaseAddress = new Uri(url);
  client.DefaultRequestHeaders.Clear();
  client.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("nl-NL"));

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

  string token = param.token.Value;
  client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

       // New code:
       var response = await client.GetAsync( string.format("api/products/id={0}&type={1}",param.Id.Value,param.Id.Type) );
if (response.IsSuccessStatusCode)
  {
      var result = response.Content.ReadAsStringAsync().Result;
      return Request.CreateResponse(HttpStatusCode.OK, result);
  }

  return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "fail");

   }

在 API 方面,您可以這樣做。

[HttpGet]
public HttpResponseMessage Product(string id, string type)
{
 return null;
}

引用自:https://stackoverflow.com/questions/26403587