ASP.NET Web Api - 将对象发布到自定义操作控制器

时间:2012-05-24 10:46:31

标签: asp.net-mvc json web-services rest

我有下一个ApiController

public class ValuesController : ApiController
{
    // GET /api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    public User CreateUser(User user)
    {
        user.Id = 1000;
        return user;
    }
}

使用下一条路线

    routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional });

我想要使用这项服务。我可以使用第一种方法:

    var client = new WebClient();
    var result = client.DownloadString(@"http://localhost:61872/api/values/get");

但我不能消耗第二种方法。当我做下一个:

    var user = new User() { Name = "user1", Password = "pass1" };
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(user);
    result = client.UploadString(@"http://localhost:61872/api/values/createuser", json);

我在没有其他信息的情况下捕获下一个例外

  

远程服务器返回错误:(500)内部服务器错误。

我有两个问题:

  1. 将自定义对象设置为服务方法参数的正确方法是什么?
  2. 如何获得有关“魔术”异常的附加信息?

1 个答案:

答案 0 :(得分:8)

如果您打算发送JSON请求,请确保已正确设置Content-Type请求标头,否则服务器不知道请求的编码方式以及您的Api的user参数controller action take为null:

using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.ContentType] = "application/json";
    var user = new User() { Name = "user1", Password = "pass1" };
    var json = Newtonsoft.Json.JsonConvert.SerializeObject(user);
    var result = client.UploadString(@"http://localhost:61872/api/values/createuser", json);
}