2013-06-01 113 views
0

我正在嘗試構建某種類似REST的API,我意識到我的第一份草稿可能不是真正的RESTful設計模式附近的東西。然而,我真正的問題是我應該如何使用JSON來使用我的服務?消費WebAPI 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和我怎麼解釋它在客戶端草案?

+1

不完整的答案,但對於使用REST服務,您應該查看RestSharp。 –

+0

是的,我一直在調查,但我「希望」一些代碼,不依賴於第三方。 – dbd

+2

在服務器端,Web API將自動序列化返回值(如果這是客戶端請求的內容,則返回JSON)。你看過http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api? –

回答

0

看看System.Net.Http.Formatting.dll中的System.Net.Http.HttpContentExtensions。作爲解釋here(及以上評論由邁克·沃森建議),你可以在響應內容調用ReadAsAsync <牛逼>()的JSON(或XML)反序列化到CLR類型:

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

如果您需要自定義反序列化,該文章鏈接到MediaTypeFormatters的進一步解釋。