작동하지 델타 <...>를 사용하여 "PATCH"ASP.NET의 웹 API - 더블 속성이 나는 다음과 같은 데이터를 생성하고 자바 스크립트 클라이언트 코드에서
var employee = {
FirstName: "Rudolf",
Salary: 99
};
내가 다음 MVC 웹에 Ajax 호출을 통해이 통과를 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();
}
}
,536,
참고 : 실제 클라이언트 - 서버 호출이 정상적으로 작동하기 때문에 간결하게하기 위해 일부 정보가 누락되었습니다.
코드가 예상대로 작동하지만 Salary 속성 (유일한 문자열이 아닌 문자열)이 항상 0으로 설정되어 있습니다. 그래서 그 분야는 절대로 업데이트되지 않습니다.
급여가 전달되지 않는 이유는 무엇입니까?
주 : 나는/GET/POST/PUT 매우 유사한 클라이언트 - 서버 코드를 사용하여 삭제하고 그들은 모두 잘 작동, 그래서 그것이 델타 <> 부분 관련이있다 생각합니다.
우리가 어떻게 INT32를 사용하여 JSON 파서를 알 수 있습니다 참조 중 하나로, OData 미디어 타입 포맷터를 사용하여 수를 언급? – Marty
ODataMediaTypeFormatter 또는 타사 라이브러리를 사용할 수 있습니다. – Marusyk