Consuming WebAPI JSON

本文关键字:JSON WebAPI Consuming | 更新日期: 2023-09-27 18:16:43

我正在尝试构建某种类似rest的API,我意识到我的初稿可能与真正的RESTful设计模式相去不远。然而,我真正的问题是,我应该如何使用JSON来消费我的服务?

在我所谓的实际示例中我希望用户通过服务登录所以我有这个AuthenticationController

namespace RESTfulService.Controllers
{
    public class AuthenticationController : ApiController
    {
        public string Get(string username, string password)
        {
            // return JSON-object or JSON-status message
            return "";
        }
        public string Get()
        {
            return "";
        }
    }
}

考虑到该技术的日益普及,我认为使用该服务只需要很少的代码。我真的需要用JSON之类的第三方包手动序列化JSON吗?下面是我给客户的草稿

private static bool DoAuthentication(string username, string password)
{
    var client = InitializeHttpClient();
    HttpResponseMessage response = client.GetAsync("/api/rest/authentication").Result;  
    if (response.IsSuccessStatusCode)
    {
        //retrieve JSON-object or JSON-status message
    }
    else
    {
        // Error
    }
    return true;
}
private static HttpClient InitializeHttpClient()
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://localhost/");
    // Add an Accept header for JSON format.
    client.DefaultRequestHeaders.Accept.Add(
        new MediaTypeWithQualityHeaderValue("application/json"));
    return client;
}

我如何从服务发送JSON以及如何在客户端上解释它?

Consuming WebAPI JSON

查看System.Net.Http.HttpContentExtensions中的System.Net.Http.Formatting.dll。正如这里所解释的(以及Mike Wasson在上面的评论中建议的),您可以在响应内容上调用ReadAsAsync()来将JSON(或XML)反序列化为CLR类型:

if (response.IsSuccessStatusCode)
{
    var myObject = response.Content.ReadAsAsync<MyObject>();
}

如果您需要自定义反序列化,那篇文章链接到对MediaTypeFormatters的进一步解释。