使用 webclient 时控制器中的字符串参数为空
string parameter in controller is null when using webclient
当我使用 WebClient 调用控制器中的函数时
using (WebClient client = new WebClient())
{
client.BaseAddress = "http://localhost/";
client.Headers.Add("Content-Type", "application/json");
client.UploadString("api/test", HttpMethod.Put.ToString(), stringParameter);
}
我成功调用了controller中的函数,但是controller中的"stringParameter"是空的,如下代码:
[Route("api/test")]
[HttpPut]
public async Task<IHttpActionResult> Test([FromBody] string stringParameter)
{
if (!ModelState.IsValid)
{
// the flow goes here
return BadRequest(ModelState);
}
// ...
}
我想知道我在哪里犯了错误以及如何解决问题。非常感谢。
备注:"stringParameter"如果是数字就可以,比如"123"但是如果是"A123"或者"B123".
就不行
当您将内容类型设置为 "application/json" 时,您应该发送有效的 JSON 值而不是原始字符串。数字是 JSON 并且在纯文本中是相同的,所以这就是它起作用的原因。
尝试在发送前将文本序列化为 JSON:
JsonConvert.ToString(stringParameter);
(我在这里使用 Newtonsoft.Json nuget 包)
或者您可以尝试使用内容类型 text/plain
,但我不确定您的网站 api 是否配置为默认处理该类型。
当我使用 WebClient 调用控制器中的函数时
using (WebClient client = new WebClient())
{
client.BaseAddress = "http://localhost/";
client.Headers.Add("Content-Type", "application/json");
client.UploadString("api/test", HttpMethod.Put.ToString(), stringParameter);
}
我成功调用了controller中的函数,但是controller中的"stringParameter"是空的,如下代码:
[Route("api/test")]
[HttpPut]
public async Task<IHttpActionResult> Test([FromBody] string stringParameter)
{
if (!ModelState.IsValid)
{
// the flow goes here
return BadRequest(ModelState);
}
// ...
}
我想知道我在哪里犯了错误以及如何解决问题。非常感谢。
备注:"stringParameter"如果是数字就可以,比如"123"但是如果是"A123"或者"B123".
当您将内容类型设置为 "application/json" 时,您应该发送有效的 JSON 值而不是原始字符串。数字是 JSON 并且在纯文本中是相同的,所以这就是它起作用的原因。
尝试在发送前将文本序列化为 JSON:
JsonConvert.ToString(stringParameter);
(我在这里使用 Newtonsoft.Json nuget 包)
或者您可以尝试使用内容类型 text/plain
,但我不确定您的网站 api 是否配置为默认处理该类型。