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

sla*_*gey 6 rest asp.net-mvc json web-services

我有下一个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;
    }
}
Run Code Online (Sandbox Code Playgroud)

与下一个路线

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

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

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

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

    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);
Run Code Online (Sandbox Code Playgroud)

我没有附加信息就抓住了下一个例外

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

我有两个问题:

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

Dar*_*rov 8

如果您打算发送JSON请求,请确保已正确设置Content-Type请求标头,否则服务器不知道请求如何编码以及user您的Api控制器操作所采用的参数为空:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,伙计,谢谢你,我是你们的chidrens))它的笑话))你能不能给我一些关于除了asp.net/mvc之外的WebApi的文档? (3认同)