HttpClient传递多个简单参数

Quo*_*ter 11 asp.net-mvc post dotnet-httpclient

我正试图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");
}
Run Code Online (Sandbox Code Playgroud)

在进程控制器中,我试图像这样接收它:

[HttpPost]
public HttpResponseMessage Product(string id, string type)
{
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但它永远达不到这一点controller.我总是得到一个"未找到状态代码".

那么如何通过2个简单的参数HttpClient()

NMK*_*NMK 15

对于简单类型参数,请使用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");

    }
Run Code Online (Sandbox Code Playgroud)

在API方面,你可以这样做.

[HttpGet]
public HttpResponseMessage Product(string id, string type)
{
  return null;
}
Run Code Online (Sandbox Code Playgroud)