我有一個更新用戶首選項的Web API服務調用。不幸的是,當我從jQuery ajax調用中調用POST方法時,請求參數對象的屬性始終爲空(或默認值),而不是傳入的內容。如果我使用REST客戶機(我使用Postman)調用相同的確切方法, ,它的作品非常漂亮。我不知道我在做什麼錯,但我希望以前有人看到過。這是相當簡單的......Web API複雜參數屬性全爲空
這裏是我的請求對象:
public class PreferenceRequest
{
[Required]
public int UserId;
public bool usePopups;
public bool useTheme;
public int recentCount;
public string[] detailsSections;
}
這裏是在UserController類我控制器的方法:
public HttpResponseMessage Post([FromBody]PreferenceRequest request)
{
if (request.systemsUserId > 0)
{
TheRepository.UpdateUserPreferences(request.UserId, request.usePopups, request.useTheme,
request.recentCount, request.detailsSections);
return Request.CreateResponse(HttpStatusCode.OK, "Preferences Updated");
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, "You must provide User ID");
}
}
這裏是我的Ajax調用:
var request = {
UserId: userId,
usePopups: usePopups,
useTheme: useTheme,
recentCount: recentCount,
detailsSections: details
};
$.ajax({
type: "POST",
data: request,
url: "http://localhost:1111/service/User",
success: function (data) {
return callback(data);
},
error: function (error, statusText) {
return callback(error);
}
});
我試着將dataType & contentType設置爲幾個不同('json','application/json'等),但請求對象的屬性總是默認或爲空。因此,例如,如果我通過在該對象:
var request = {
UserId: 58576,
usePopups: false,
useTheme: true,
recentCount: 10,
detailsSections: ['addresses', 'aliases', 'arrests', 'events', 'classifications', 'custody', 'identifiers', 'phone', 'remarks', 'watches']
}
我可以看到完全填充的請求對象與有效值如上列出。但是,在Web API控制器,該請求是存在的,但性能如下:
UserId: 0,
usePopups: false,
useTheme: false,
recentCount: 0,
detailsSections: null
僅供參考 - 我沒有做任何ASP.Net MVC或ASP.NET頁面這個項目,只是用Web API作爲服務並使用jQuery $ .ajax進行所有調用。
任何想法我在這裏做錯了嗎?謝謝!
更新:我只是想指出,我有在做這個同樣的事情其他控制器此相同的Web API項目很多方法,和我打電話的完全相同的方式,和他們的工作完美!我花了一個早上比較了各種調用,並且在方法或頭文件中看起來沒有任何區別,但它對這種特定的方法不起作用。
我也嘗試切換到Put方法,但我得到完全相同的結果 - 請求對象進來,但沒有填充正確的值。有什麼令人沮喪的是,我在這個項目中有大約20個控制器類,並且這些文章可以在所有這些類中工作......
你的ajax文章的內容類型是什麼,如果我沒有弄錯jquery默認是url-form-encoding,你想要的是application/json嗎? – Dalorzo
這是json。正如我所提到的,我已經嘗試過指定content-type:'json',content-type:'application/json',並且我得到了相同的結果,或者兩者都不相同。 – Eddie
檢查此可能的原因[WebApi發佈配置](http://stackoverflow.com/a/23925564/1959948) – Dalorzo