0

我正在尝试构建某种类似 RESTful 的 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.net)手动序列化 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 以及如何在客户端解释它?

4

1 回答 1

0

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

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

如果您需要自定义反序列化,该文章链接到 MediaTypeFormatters 的进一步说明。

于 2013-07-17T14:06:17.380 回答