Я пытаюсь обновить свой ресурс из приложения Angular, совершая вызов Web Api с использованием метода PUT. По какой-то причине все, что я получаю, это ошибка 400 Bad Request, даже когда я пытаюсь сделать то же самое с помощью Postman.
Поэтому у меня есть два вопроса, первый - если следующий код верен, принимая во внимание веб. файл конфигурации, вывод на консоль, и второе - я должен как-то настроить свой IIS для разрешения вызовов PUT? Все работает на IIS, и до сих пор я встречался с blogpost, работая над этой проблемой, в которой упоминается что-то вроде этого - я действительно не знаю, что следует изменить. потому что мне кажется, что я удалил WebDAV в моем файле web.config.
web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
<remove name="WebDAV" />
</handlers>
<aspNetCore processPath=".\AuctorAPI.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
</location>
</configuration>
метод обновления в моем угловом сервисе:
updateClient(client: any) {
console.log(client);
var obj = JSON.parse(client);
const headers = new HttpHeaders().set('content-type', 'application/json');
var body = {
name: obj['name'],
surname: obj['surname'],
phone: obj['phone'],
email: obj['email'],
gymEntriesLeft: obj['gymEntriesLeft'],
martialArtsEntriesLeft: obj['martialArtsEntriesLeft']
}
console.log("ID");
console.log(obj['id']);
console.log("BODY");
console.log(JSON.stringify(body));
return this.http.put<Client>(this.url + obj['id'], JSON.stringify(body), { headers }).pipe(
catchError(this.errorHandler)
);
}
Угловой компонент (вызов метода удаления)
onFormSubmit() {
this.clientService.updateClient( this.clientById).subscribe(() => {
this.getClients();
this.edit = false;
this.editRowId = null;
})
}
Метод контроллера:
// PUT: api/Clients/5
[HttpPut("{id}")]
public async Task<IActionResult> PutClient(int id, Client client)
{
if (id != client.Id)
{
return BadRequest();
}
_context.Entry(client).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ClientExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}