我需要使用字符串参数对post方法进行简单的webapi调用.
下面是我正在尝试的代码,但是当在webapi方法上遇到断点时,接收的值是null
.
StringContent stringContent = new System.Net.Http.StringContent("{ \"firstName\": \"John\" }", System.Text.Encoding.UTF8, "application/json"); HttpClient client = new HttpClient(); HttpResponseMessage response = await client.PostAsync(url.ToString(), stringContent);
和服务器端代码:
// POST api/values [HttpPost] public void Post([FromBody]string value) { }
请帮忙...
如果要将json发送到Web API,最好的选择是使用模型绑定功能,并使用Class,而不是字符串.
public class MyModel { [JsonProperty("firstName")] public string FirstName { get; set; } }
如果你不使用JsonProperty属性,你可以用小写的驼峰编写属性,就像这样
public class MyModel { public string firstName { get; set; } }
[HttpPost] public void Post([FromBody]MyModel value) { //value.FirstName }
您可以使用Visual Studio自动创建C#类,在此处查看此答案将JSON反序列化为对象C#
我做了以下测试代码
using System.Web.Http; using Newtonsoft.Json; namespace WebApplication3.Controllers { public class ValuesController : ApiController { [HttpPost] public string Post([FromBody]MyModel value) { return value.FirstName.ToUpper(); } } public class MyModel { [JsonProperty("firstName")] public string FirstName { get; set; } } }
using System; using System.Net.Http; namespace Temp { public class Program { public static void Main(string[] args) { Console.WriteLine("Enter to continue"); Console.ReadLine(); DoIt(); Console.ReadLine(); } private static async void DoIt() { using (var stringContent = new StringContent("{ \"firstName\": \"John\" }", System.Text.Encoding.UTF8, "application/json")) using (var client = new HttpClient()) { try { var response = await client.PostAsync("http://localhost:52042/api/values", stringContent); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); } catch (Exception ex) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(ex.Message); Console.ResetColor(); } } } } }
Enter to continue "JOHN"