2015-06-03 21 views
1

我試圖在ASP.NET Web API中的ApiController上接收POST並將其添加到Azure隊列中。 我遇到的問題是,我不想在此時將todo參數綁定到類的屬性,而是將JSON作爲Azure隊列中的字符串排隊,這樣我就可以獲得一個輔助角色來處理它這是自己的時間。通過ApiController將JSON發佈到Azure隊列

我使用招做看起來像這樣的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隊列中。

任何想法?我錯過了什麼,或者我的方法錯了嗎?

+0

你想發佈'{「文本」:「菠蘿」,「用戶」:「弗雷德」},而不是隻菠蘿作爲郵件正文。我對麼? –

+0

@GauravMantri是的,這是正確的,JSON的整個查克:) –

回答

2

你可以簡單地通過執行類似序列使用Json.Net你的對象:

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

這個工程,雖然看起來很奇怪,我需要參數綁定的所有,然後必須序列化與第三方庫的對象。有點感覺就像我錯過了一些東西似乎(至少對我來說)像一個非常正常的模式。我會等待,看看是否有更多的答案出現,然後反饋:) –

+2

Json.Net是序列化對象的一種方法。您也可以使用.net序列化程序來序列化對象。 HTH。 –

+0

我猜@Mahesh Jasti有一個好點。讓JSON參數綁定可以驗證JSON結構有點:)我想我會用這個解決方案:) –

1

如果它始終是一個字符串輸入,那麼你可以嘗試 - ([FromBody]字符串值)

但有一個對象,然後將其序列化爲字符串,確保json作爲字符串的結構是有效的,並避免產生一些無效的json數據。