簡體   English   中英

使用ASP.NET MVC 4的C#Rest Web服務

[英]C# Rest Webservice with ASP.NET MVC 4

我使用ASP.NET MVC 4 Web應用程序創建了Rest Web服務。 如果我想使用該服務並發送包含requestbody的請求,則輸入參數CoreMessage項始終為null。 我看了一些示例教程和一些示例代碼,但無法修復該錯誤。

我的Rest Client的一些代碼

        CoreMessage message = new CoreMessage() { Source = "Dummy", Date = DateTime.Now, Data = "abcd" };
        var url = "http://localhost:12294/api/message";
        var method = "POST";
        string reponseAsString = "";
        try
        {
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = method;

            using (Stream requestStream = request.GetRequestStream())
            using (StreamWriter writer = new StreamWriter(requestStream))
            {
                writer.Write(message);  
            }
        }
        catch (Exception ex)
        {
            reponseAsString += "ERROR: " + ex.Message;
        }

我的具有Post功能的Controller看起來像這樣

public MessageRepository repository = new MessageRepository();

        public HttpResponseMessage PostMessage(CoreMessage item)
        {
            bool status = repository.TransmitMessage(item);
            var response = Request.CreateResponse<bool>(HttpStatusCode.Created, status);

            return response;
        }

我的模特

public class CoreMessage
{
    public string Source { get; set; }
    public DateTime Date { get; set; }
    public string Data { get; set; }
}

有幾件事可以嘗試

首先,放置[FromBody]屬性:

public HttpResponseMessage PostMessage([FromBody] CoreMessage item)

然后嘗試將Content-Type標頭添加到您的請求中

request.ContentType = "application/json; chatset=utf-8"

而且,在寫入流之前,必須先使其為JSON,否則無法將對象寫出。 該方法取決於用於JSON序列化的框架。 最受歡迎的應用程序之一是JSON.NET,它非常容易通過NuGet軟件包管理器進行安裝。 安裝后,您可以將CoreMessage序列化為以下字符串:

string messageString = JSONConvert.SerializeObject(message);

然后以UTF-8編碼編寫:

using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8))
{
    writer.Write(messageString);
}

畢竟,如果仍然無法使用,您可以嘗試在Chrome中使用Dev HTTP Client 該工具將允許您制作原始HTTP請求。 您的請求應具有Content-Type作為application/json; charset=utf-8 application/json; charset=utf-8並將POST數據作為JSON字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM