我试图在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队列中。
有什么想法吗?我错过了什么或者我的方法是错的吗?
答案 0 :(得分:2)
您只需使用Json.Net
序列化对象,例如:
var serializedData = JsonConvert.SerializeObject(message);
var msg = new CloudQueueMessage(serializedData);
queue.AddMessage(msg);
答案 1 :(得分:1)
如果始终是字符串输入,那么您可以尝试 - ([FromBody]字符串值)
但是拥有一个对象然后将其序列化为字符串可以确保json作为字符串的结构是有效的并且将避免使用一些无效的json数据。