HttpClient через BSON для RESTful API - PullRequest
2 голосов
/ 21 октября 2019

Я попытался отправить объект из оконного клиента в контроллер.

Может быть получен тестовый объект, но id и id2 имеют значение 0 и null.

Я пропустил некоторые настройки?

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)
    {

    }
}

1 Ответ

0 голосов
/ 21 октября 2019

Register настраивается для ApiController, в то время как показанный ReportController является MVC Controller

Обновите целевой контроллер, чтобы он выводился из правильного типа и имел необходимые атрибуты.

[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();
...