2017-08-01 19 views
1

我有POST方法的問題。我有一個用C#編程的REST服務器,我想在C#中使用這個REST服務,但我不知道如何。問題是,我的方法接受一個POST,收到一個JSON有效載荷,並返回一個HTTPStatusCode和一個數字:C#中的JSON POST返回號碼

id_task= planificadorService.CreaTarea(tareaDTO);//tareaDTO is a JSON 

if (id_tarea == 0) 
{ 
    response = Request.CreateResponse(HttpStatusCode.NotFound, "Cannot create task "); 
    return response; 
} 

response = Request.CreateResponse(HttpStatusCode.Created); 
response.Content = new StringContent(JsonConvert.SerializeObject(id_task), Encoding.UTF8, "application/json"); 
return response; 

這是很容易使用與WebRequestHttpWebResponse類GET方法來做到這一點,但我不」不知道如何用POST方法來做到這一點。經過多次嘗試,我結束了這樣的事情:

public void PostTareas(Tarea tarea) 
{ 
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url_base + "/v1/tareas"); 
    httpWebRequest.ContentType = "application/json"; 
    httpWebRequest.Method = "POST"; 
    string json = JsonConvert.SerializeObject(tarea); 

    var client = new HttpClient() 
    { 
     BaseAddress = new Uri(url_base + "/v1/tareas") 
    }; 

    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    HttpResponseMessage response; 

    response.Content= new StringContent(JsonConvert.SerializeObject(tarea).ToString(), Encoding.UTF8, "application/json"); 

    response = client.PostAsync(url_base + "/v1/tareas", json)).Result; 
} 

我在正確的軌道上?我如何做到這一點,以便我能夠訪問Json內容?由於

PD-對不起我的英語,這不是我的母語,我知道有可能是錯誤地表達自己

+0

返回什麼狀態代碼,調試時出現任何錯誤? –

回答

2

隨着WebRequest你需要編寫JSON的POST請求負載,使用WebRequest.GetRequestStream

var httpWebRequest = (HttpWebRequest)WebRequest.Create(url_base + "/v1/tareas"); 
... 
using(var requestStream = request.GetRequestStream()) { 
    // Write the serialized json into the stream, it will be send as payload 
    using(TextWriter writer = new StreamWriter(requestStream)) { 
    writer.WriteLine(JsonConvert.Serialize(tarea)); 
    } 
} 
var response = request.GetResponse(); 

可以使用HttpClient和呼叫PostAsync,因爲你在你的代碼的第二部分做的事情。無論哪種方式都很好,但堅持一個:)

您還應該考慮使用高(er)級庫,如RestSharp。最終考慮使用Swagger通過Swashbuckle公開服務器API,生成一個swagger-codegen客戶端,並將您的時間花在API的更高層抽象上,而不是HTTP/Json層。

+0

非常感謝! 運行後,按照您的說法安裝名爲Flurl的庫,並且沒問題! – Aw3same