2015-06-03 3 views
1

Я пытаюсь получить POST на ApiController в веб-интерфейсе ASP.NET и добавить его в Azure Queue. Проблема, с которой я сталкиваюсь, заключается в том, что я не хочу привязывать параметр к свойствам класса в данный момент, но вместо очереди JSON в качестве строки в очереди Azure, чтобы я мог получить роль рабочего, чтобы справиться с ней в это собственное время.Проводка JSON в Azure Queue через ApiController

Я использую 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); 
    } 

Работает с классом сообщений, который выглядит так:

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

Это все работает нормально, но я просто хочу захватить тело запроса (т. JSON) и не связывать его, а вместо этого добавить все это в Azure Queue как строку.

Любые идеи? Я что-то упускаю, или мой подход ошибочен?

+0

Вы хотите отправить сообщение '{" text ":" ананас "," пользователь ":" fred "}' вместо простого ананаса в качестве тела сообщения. Я прав? –

+0

@GauravMantri yep, это правильно, весь патрон JSON :) –

ответ

2

Вы можете просто сериализовать объект, используя Json.Net делать что-то вроде:

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

это работает, хотя кажется странным, что мне нужно привязывать параметр вообще, а затем сериализовать этот объект с помощью сторонней библиотеки. Кинда чувствует, что я что-то упускаю из-за чего-то, что кажется (по крайней мере для меня), как довольно нормальный узор. Я подожду, чтобы узнать, выходят ли еще ответы, а затем обратная связь :) –

+2

Json.Net - это один из способов сериализации объекта. Вы можете также использовать сериализатор .net для сериализации объекта. НТН. –

+0

Я думаю, что у @Mahesh Jasti есть хороший момент. Наличие привязки параметра JSON несколько подтвердило бы структуру JSON :) Я думаю, что я пойду с этим решением :) –

1

Если это всегда строка ввода, то вы можете попробовать - ([FromBody] строковое значение)

Но имеющий объект, а затем сериализуя его в строку, убедитесь, что структура json как строки действительна и позволит избежать некоторых недопустимых json-данных.

Смежные вопросы