2015-06-25 98 views
-1

我已經在我的Web API以下方法:的Web API參數始終是空

[AcceptVerbs("POST")] 
public bool MoveFile([FromBody] FileUserModel model) 
{ 
    if (model.domain == "abc") 
    { 
     return true; 
    } 
    return false; 
} 

FileUserModel被定義爲:

public class FileUserModel 
{ 
    public string domain { get; set; } 
    public string username { get; set; } 
    public string password { get; set; } 
    public string fileName { get; set; } 
} 

我試圖通過提琴手但每當調用此我做模型總是設置爲null。在Fiddler中,我發送作曲者使用POST,URL在那裏並且正確,因爲Visual Studio中的調試器在調用時會中斷。請求我已經爲設置:

User-Agent: Fiddler 
Host: localhost:46992 
Content-Length: 127 
Content-Type: application/json 

請求正文爲:

"{ 
    "domain": "dcas" 
    "username": "sample string 2", 
    "password": "sample string 3", 
    "fileName": "sample string 4" 
}" 

但每當我運行作曲家當調試器到達它總是顯示模式是空的斷點。

+1

是否請求主體具有周邊雙引號,你在這裏張貼? – DavidG

+1

是一個拼寫錯誤,即域後:dcas沒有「,」? – Mark

+0

您是否嘗試將一個測試的輸入參數類型從FileUserModel更改爲字符串? –

回答

0

你的問題是您使用周圍的雙引號發佈JSON數據。刪除它們,它應該工作。

而且修復丟失的逗號:

{ 
    "domain": "dcas", 
    "username": "sample string 2", 
    "password": "sample string 3", 
    "fileName": "sample string 4" 
} 
1

您錯過了您要發送的請求中的,。另外,由於包含雙引號,因此實際上發送的是JSON字符串,而不是JSON對象。刪除引號並添加逗號應該可以解決您的問題。

{ 
    "domain": "dcas", // << here 
    "username": "sample string 2", 
    "password": "sample string 3", 
    "fileName": "sample string 4" 
} 

此外,由於您發佈模型,因此不需要[FromBody]屬性。

[AcceptVerbs("POST")] 
public bool MoveFile(FileUserModel model) 
{ 
    if (model.domain == "abc") 
    { 
     return true; 
    } 
    return false; 
} 

這應該就好了。欲瞭解更多信息,請參閱this blog

+0

這是多餘的,但doesn '回答這個問題 – DavidG

+0

編輯也是不正確的,在這種情況下什麼是「JSON字符串」?使用引號,數據對API沒有意義 – DavidG

+0

編輯確實提供了正確的答案。將被API解釋爲JSON字符串,因爲'Content-Type'(根據OP的帖子)是'app lication/json'。 – Knelis

0

你需要讓AJAX調用,比如下面

$(function() { 
    var FileUserModel = { domain: "dcas", username: "sample string 2", 
      password: "sample string 3", fileName: "sample string 4"}; 
    $.ajax({ 
     type: "POST", 
     data :JSON.stringify(FileUserModel), 
     url: "api/MoveFile", 
     contentType: "application/json" 
    }); 
}); 

不要忘記標記的內容類型爲JSON和服務器端API代碼

[HttpPost] 
public bool MoveFile([FromBody] FileUserModel model) 
{ 
    if (model.domain == "abc") 
    { 
     return true; 
    } 
    return false; 
} 

Sending HTML Form Data in ASP.NET Web API

+0

他的代碼很好,這是發佈的數據不正確。 – DavidG

+0

@DavidG - 我在我的代碼中更正了那部分...並且還提出了一些他需要檢查的內容...我認爲-1是在給出錯誤解決方案時給出的,而不是用於正確解決方案..是否存在我建議的任何問題使用JSON.stringify,並要求他檢查contentType:「application/json」..我想這沒什麼不對, –

+0

我同意,但你在這裏發佈的不是解決方案。 OP也沒有提到Javascript或jQuery。而我並沒有說我的這一點讓你失望了。 – DavidG