繁体   English   中英

如何在C#中使用HttpClient将对象正确发布到ASP.NET Web API?

[英]How do I correctly POST an object to ASP.NET Web API using HttpClient in C#?

我已经尝试了几天,以找到使用C#客户端(特别是我的Windows Forms应用程序)将对象发布到Web API控制器方法的正确方法。 这是我使用对象调用Web API的代码:

private async void insertDocument(Document doc)
{
    using (var client = new HttpClient())
    {
        var response = await client.PostAsJsonAsync(
            Constants.API_ROOT_URI + "Documents/Post", doc);
        if (response.IsSuccessStatusCode)
        {
            MessageBox.Show("Document posted successfully.");
        }
        else
        {
            MessageBox.Show("Document NOT posted successfully.");
        }
    }
}

这是我的Web API中的控制器POST方法:

// POST api/Documents (INSERT)
public HttpResponseMessage Post([FromBody] Document doc)
{
    if (doc == null)
    {
        Request.CreateErrorResponse(HttpStatusCode.BadRequest, 
            "Could not read the Document from body");
    }
    bool success = docBL.insertDocumentEntry(doc);
    if (success)
    {
        return Request.CreateResponse(HttpStatusCode.OK);
    }
    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, 
        "Could not save Document model to database");
}

最后这是我的WebApiConfig文件中的路由模板:

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

我尝试了许多方法来完成此任务,并将我的Document对象从C#UI客户端正确地获取到Web API控制器方法,并且我尝试过的每一种方法都导致响应变量中的“ StatusCode 500:Internal Server Error”当我使用断点调试时我的insertDocument方法。 有人可以告诉我我在做什么错吗?

我发现自己在做错什么,我很惊讶花了这么长时间才看到错误!

事实证明,我并没有填写作为JSON传递给Web API的对象的所有属性。 没有封装在head对象中封装的某些对象,因此API将JSON注册为无效的Document对象。

感谢所有的评论!!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM