向client.PostAsJsonAsync函数传递多个参数

4

我目前是这样向我的web api发布内容的:

client.PostAsJsonAsync("api/controller/methodincontroller", listOfProductObject);

我想知道如何在不将其作为我的Product模型属性的情况下,除了我的Product对象列表之外,还可以向我的控制器方法发送额外的字符串。

如果这不可能,我将不得不创建一个只有2个属性的模型来实现这个目的:

IList<Product> productList
string additionalParam

你能否在控制器方法中添加另一个参数? - Ric
是的,例如:public HttpResponseMessage MyMethod(IList<Product> productList, string additionalParam)。但是当调用PostAsJsonAsync时,我该如何从我的其他应用程序中填充此参数呢? - William Venice
1
你可以将一个参数附加到 URI 中,例如:api/controller?additionalParam=something;另一个可使用 from body 属性。详情请参考:http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api。完整代码如下所示:`client.PostAsJsonAsync("api/controller/methodincontroller?additionalParam=" + myParam, listOfProductObject);` - Ric
那么在接收端,我的方法声明应该是什么样子的?哪个参数先出现,我是否需要更改任何路由设置? - William Venice
请注意,我没有使用 PostAsJsonAsync,但是思路是相同的。 - Ric
1个回答

4

好的,所以我成功地使用样例而不使用PostAsJsonAsync

设置:

string json = JsonConvert.SerializeObject(new List<somemodel> { new somemodel() });
StringContent sc = new StringContent(json, Encoding.UTF8, "application/json");

HttpClient c = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true });
var x = c.PostAsync("http://localhost:58893/api/values?additionalParam=" + "test", sc).Result; // returns 200

控制器:

public IHttpActionResult Post([FromUri] string additionalParam, [FromBody] List<somemodel> models)

显然这适用于我的样例对象somemodel,但你懂的。

这个很完美。我的控制器代码看起来和你的一模一样,但是在设置部分的代码是这样的:Task<HttpResponseMessage> response = client.PostAsJsonAsync("api/mycontroller/controllermethod?additionalParam=" + "test", productList); 你添加了额外的设置代码有什么特别的原因吗?我很确定当发送时我的productList会自动转换为JSON格式。在调试器中,我现在使用的似乎也能正常工作。 - William Venice
是的,因为我似乎没有PostAsJsonAsync,而且目前Nuget也不允许我获取它,所以我只是添加了一些代码来使其工作并传递json,但基本上是相同的东西! - Ric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接