首页 > 解决方案 > HttpClient 通过 BSON 到 RESTful API

问题描述

我已经尝试将对象从窗口客户端发布到控制器。

它可以是接收测试对象但idid20null值。

我错过了一些配置吗?

public class Test
{
    public int id { get; set; }
    public string id2 { get; set; }
}

//webapiconfig

public static void Register(HttpConfiguration config)
{

    config.MapHttpAttributeRoutes();
    config.Formatters.Add(new BsonMediaTypeFormatter());
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

窗口客户端

private async void Form1_LoadAsync(object sender, EventArgs e)
{
    using (HttpClient client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:58716/");

        // Set the Accept header for BSON.
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));

        var aa = new Test()
        {
            id = 2,
            id2="3333"
        };

        // POST using the BSON formatter.
        MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
        var result = await client.PostAsync("Report/Test", aa, bsonFormatter);
        result.EnsureSuccessStatusCode();
    }

}

网络服务器

public class ReportController : Controller
{
    public void Test(Test aa)
    {

    }
}

标签: c#winformswebclientbson

解决方案


Register正在配置一段ApiController时间,显示ReportController的是 MVCController

更新目标控制器以从正确的类型派生并具有必要的属性。

[RoutePrefix("api/Report")]
public class ReportController : ApiController {
    //POST api/Report/Test
    [HttpPost]
    [Route("Test")]
    public IHttpActionResult Test([FromBody]Test model) {
        if(ModelState.IsValid) {
            //...

            return Ok();
        }
        return BasRequest(ModelState);
    }
}

并更新客户端以发送到正确的 URL

//...

 // POST using the BSON formatter.
MediaTypeFormatter bsonFormatter = new BsonMediaTypeFormatter();
var result = await client.PostAsync("api/Report/Test", aa, bsonFormatter);
result.EnsureSuccessStatusCode();

推荐阅读