2015-05-27 39 views
1

我想發送兩個參數get和post到服務上的方法沒有模型,但它總是空的。我怎麼解決這個問題?此外,這個問題的邏輯原因是什麼?代碼如下,我遇到問題;WebApi GET和多個POST參數無模型總是空

[HttpGet] 
public Result GetUser(string userId) 
{ 
    using (DataContext dc = new DataContext()) 
    { 
     return dc.GetUser(userId); 
    } 
} 

[HttpPost] 
public Result CreateUser([FromBody]string firstname, [FromBody]string lastname) 
{ 
    using (DataContext dc = new DataContext()) 
    { 
     return dc.CreateUser(firstname, lastname); 
    } 
} 
+0

你是什麼意思,你試圖沒有模型做到這一點? – Luke

+0

你也可以發佈你的ajax請求調用,沒有它你的問題是不完整的。 – Yasser

回答

1

您在POST請求中要做的事情根據HTTP協議無效。每個Web請求只能有一個主體,雖然可以通過一個非結構化形式的單個參數,但兩個(源Asp.net網站here)是不可能的。因此你有2個選擇:

1)。將2個參數添加到url - 將[FromBody]更改爲[FromUri]

2)。將這兩個參數封裝到一個類/模型中,並接受它作爲你post方法的輸入(從body或URL/URi都可以)。數據的發送者就可以指定他們希望如何使用asp.net網站的API發送此,通過XML或JSON,默認情況下

+0

感謝您的推薦。我剛剛檢查了你在上面指出的文件。 –

0

樣品Ajax調用的消耗你的網頁API

$.ajax({ 
     url: "http://localhost:49493/api/Values", 
     type: "Get", 
     data: {'userId' : 1} 
     success: function (data) { 
      /// process data 
     }, 
     error: function (msg) { alert(msg); } 
    }); 
1

的'FromBody'屬性只能用於方法中的單個參數,因此使用'FromBody'將它們標記爲不起作用。 您可以創建一個包含'firstname'和'lastname'作爲屬性的簡單模型,併爲post方法提供該類型的參數。

另一個解決方案是使用從解析Json中獲得的動態對象來獲取屬性。

dynamic foo = JObject.Parse(jsonText);

string firstname = foo.firstname;

string lastname = foo.lastname;

+0

謝謝你的推薦。 –