通过 ApiController 将 JSON 发布到 Azure 队列

Posting JSON to an Azure Queue via an ApiController

我正在尝试在 ASP.NET Web API 中的 ApiController 上接收 POST 并将其添加到 Azure 队列。 我遇到的问题是此时我不想将参数绑定到 class 的属性,而是将 JSON 作为 Azure 队列中的字符串排队,这样我就可以获得一个工作者角色来在它自己的时间处理它。

我正在使用 Fiddler 来执行 POST,如下所示:

User-Agent: Fiddler
Host: localhost:50348
Content-Type: application/json
Content-Length: 34

使用此请求正文:

{"text":"pineapple","user":"fred"}

这是我的控制器(为清楚起见稍微简化了一点):

public class MessagesController : ApiController
{   
    // POST api/messages
    public void Post([FromBody] Message message)
    {
        var storage = CloudStorageAccount.DevelopmentStorageAccount;
        var queueClient = storage.CreateCloudQueueClient();
        var queue = queueClient.GetQueueReference("messages");
        if (queue.CreateIfNotExists())
        {
            Trace.WriteLine("Hello world for the first time");
        }

        var msg = new CloudQueueMessage(message.text);
        queue.AddMessage(msg);
    }

这是在处理消息 class,它看起来像这样:

public class Message
{
    public string user { get; set; }
    public string text { get; set; }   
}

一切正常,但我只想获取请求正文(即 JSON)而不绑定它,而是将整个内容作为字符串添加到 Azure 队列中。

有什么想法吗?我是不是遗漏了什么或者我的方法是错误的?

您可以使用 Json.Net 简单地序列化您的对象,方法如下:

var serializedData = JsonConvert.SerializeObject(message);
var msg = new CloudQueueMessage(serializedData);
queue.AddMessage(msg);

如果一直是字符串输入那么可以试试-([FromBody]字符串值)

但是拥有一个对象然后将其序列化为字符串可以确保 json 作为字符串的结构是有效的并且将避免一些无效的 json 数据。