Что вызывает ошибку 405 для метода POST в приложении ASP.NET MVC? - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь протестировать 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.

Любой совет с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...