通过ApiController将{JSON}发布到Azure队列

时间:2015-06-03 00:16:12

标签: c# json azure asp.net-web-api azure-queues

我试图在ASP.NET Web API中的ApiController上接收POST并将其添加到Azure队列中。 我遇到的问题是,此时我不希望todo参数绑定到类的属性,而是将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);
    }

这适用于Message类,如下所示:

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

这一切都运行正常,但我只是想抓住请求体(即JSON)而不是绑定它,而是将整个事物作为字符串添加到Azure队列中。

有什么想法吗?我错过了什么或者我的方法是错的吗?

2 个答案:

答案 0 :(得分:2)

您只需使用Json.Net序列化对象,例如:

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

答案 1 :(得分:1)

如果始终是字符串输入,那么您可以尝试 - ([FromBody]字符串值)

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