От клиентского кода JavaScript Я создаю следующие данные:ASP.NET Web Api - «PATCH» с помощью Delta <...> с двойным свойство не работает
var employee = {
FirstName: "Rudolf",
Salary: 99
};
Я тогда передать это через вызов Ajax к Web MVC Действие API контроллера:
using System.Web.Http.OData;
public async Task<IHttpActionResult> Patch([FromUri] int employeeId, [FromBody] Delta<Employee> employee)
{
await _employeeService.Patch(employeeId, employee);
return Ok();
}
Это вызывает мою службу, чтобы обновить базу данных следующим образом:
public async Task Patch(int employeeId, Delta<Employee> employee)
{
using (var context = new DBEntities())
{
if (employee.TryGetPropertyValue("Salary", out object salary))
{
var ss = Convert.ToDouble(salary); // Always 0
}
if (employee.TryGetPropertyValue("FirstName", out object firstName))
{
var ss = Convert.ToString(firstName); // Expected value
}
var currentEmployee = await context.Employees
.FirstOrDefaultAsync(e => e.Id == employeeId);
if (currentEmployee == null)
return;
employee.Patch(currentEmployee);
await context.SaveChangesAsync();
}
}
Примечание: Я пропустил некоторые детали для краткости, так как фактический клиент-сервер работает нормально.
Код, похоже, работает должным образом, но свойство Salary (единственное нестрочное) всегда равно 0 (ноль). Так что поле никогда не будет обновляться.
Любые идеи, почему Заработная плата не проходит?
Примечание: Я использую очень похожий код клиент-сервер для GET/POST/PUT/DELETE, и все они работают хорошо, поэтому я считаю, что это связано с> части Delta <.
Как мы можем сказать парсеру JSON, чтобы использовать int32? – Marty
Вы можете использовать ODataMediaTypeFormatter или сторонние библиотеки – Marusyk