2

我使用 ASP.NET MVC 4 Web 应用程序创建了一个 Rest Webservice。如果我想使用服务并发送包含请求主体的请求,则输入参数 CoreMessage 项始终为空。我看了一些示例教程和一些示例代码,但我无法修复错误。

我的 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 功能的控制器看起来像这样

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; }
}
4

1 回答 1

0

有几件事可以尝试

首先,放置[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-Typeasapplication/json; charset=utf-8和 POST 数据作为 JSON 字符串。

于 2013-06-10T17:54:13.567 回答