У меня есть вызов службы веб-API, который обновляет пользовательские настройки. К сожалению, когда я вызываю этот метод POST из jQuery ajax-вызова, свойства объекта параметра запроса всегда являются нулевыми (или значениями по умолчанию), а не тем, что передается. Если я вызову тот же самый точный метод, используя клиент REST (я использую Postman), он работает красиво. Я не могу понять, что я делаю с этим неправильно, но надеюсь, что кто-то это видел раньше. Это довольно просто...
Здесь мой объект запроса:
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
FYI. Я не делаю НИКАКИХ страниц ASP.NET MVC или ASP.NET с этим проектом, просто используя веб-API в качестве службы и делая все вызовы с помощью jQuery $.ajax.
Любая идея, что я делаю неправильно здесь? Благодарю!
UPDATE: Я просто хочу отметить, что у меня есть много методов в этом же проекте Web API в других контроллерах, которые делают это точно так же, и я называю то же самое, и они работают безупречно! Я провел утро, сравнивая различные вызовы, и, похоже, нет никакой разницы в методе или заголовках, и все же он просто не работает над этим конкретным методом.
Я также пытался переключиться на метод Put, но получаю точно такие же результаты - объект запроса приходит, но не заполняется правильными значениями. Что так расстраивает то, что у меня есть около 20 классов контроллера в этом проекте, а сообщения работают во всех этих...