【问题标题】:Posting JSON to an Azure Queue via an ApiController通过 ApiController 将 JSON 发布到 Azure 队列
【发布时间】:2015-06-03 00:16:11
【问题描述】:

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

有什么想法吗?是我遗漏了什么还是我的方法不对?

【问题讨论】:

  • 您想发布 {"text":"pineapple","user":"fred"} 而不仅仅是 pineapple 作为消息正文。我说的对吗?
  • @GauravMantri 是的,没错,整个 JSON :)

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


【解决方案1】:

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

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

【讨论】:

  • 这行得通,虽然我需要参数绑定然后必须用第三方库序列化该对象似乎很奇怪。有点感觉就像我错过了一些看起来(至少对我来说)非常正常的模式的东西。我会等着看是否有更多的答案出现然后反馈:)
  • Json.Net 是序列化对象的一种方式。您也可以使用 .net 序列化程序来序列化对象。 HTH。
  • 我猜@Mahesh Jasti 有一个很好的观点。拥有 JSON 参数绑定会在一定程度上验证 JSON 结构 :) 我想我会采用这个解决方案 :)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2019-11-08
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多