Я пытаюсь протестировать CRUD-операции для ASP-проекта, в который я только что добавил скаффолдинг WEB.API.Я проверяю операции через Почтальон.Все методы запроса, поставляемые с контроллерами скаффолдинга, работают и успешно запрашивают базу данных, кроме метода POST.Каждый раз, когда я пытаюсь вставить новый элемент в таблицу через Почтальон, я получаю ошибку 405.Я использую сырой JSON для вставки запроса, и у меня отключен WEBDAV для IIS.Я также попробовал метод через Fiddler и получил ту же ошибку.Я ничего не сделал, чтобы изменить метод или любой другой метод, поэтому я не уверен, как это происходит или что его вызывает.
Вот контроллер, который я тестировал, так чтодалеко.Единственное, что я добавил, был тег Produces вверху.
[Produces("application/json")]
[Route("api/contracts")]
[ApiController]
public class ContractsController : ControllerBase
{
private readonly PortalWizardContext _context;
public ContractsController(PortalWizardContext context)
{
_context = context;
}
// GET: api/Contracts
[HttpGet]
public async Task<ActionResult<IEnumerable<Contracts>>> GetContracts()
{
return await _context.Contracts.ToListAsync();
}
// GET: api/Contracts/5
[HttpGet("{id}")]
public async Task<ActionResult<Contracts>> GetContracts(int id)
{
var contracts = await _context.Contracts.FindAsync(id);
if (contracts == null)
{
return NotFound();
}
return contracts;
}
// PUT: api/Contracts/5
[HttpPut("{id}")]
public async Task<IActionResult> PutContracts(int id, Contracts contracts)
{
if (id != contracts.ContractId)
{
return BadRequest();
}
_context.Entry(contracts).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ContractsExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
// POST: api/Contracts
[HttpPost]
public async Task<ActionResult<Contracts>> PostContracts(Contracts contracts)
{
_context.Contracts.Add(contracts);
await _context.SaveChangesAsync();
return CreatedAtAction("GetContracts", new { id = contracts.ContractId }, contracts);
}
// DELETE: api/Contracts/5
[HttpDelete("{id}")]
public async Task<ActionResult<Contracts>> DeleteContracts(int id)
{
var contracts = await _context.Contracts.FindAsync(id);
if (contracts == null)
{
return NotFound();
}
_context.Contracts.Remove(contracts);
await _context.SaveChangesAsync();
return contracts;
}
}
Вот маршрут по умолчанию, определенный в моей конфигурации запуска:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
Вот результаты запроса почтальона
Запрос почтальона
Результаты почтальона
Если я попытаюсь выполнить запрос без идентификатора, то получу ошибку 500.
Любой совет с благодарностью.