405 Метод запрещен при выполнении HTTP POST в ASp .Net Core 2.2 Web API

Я создаю веб-API ASP .Net Core 2.2 и реализую действие контроллера, которое будет вызываться через POST. Однако, когда я запускаю его в режиме отладки в Visual Studio 2017 и вызываю конечную точку с помощью Postman, я получаю метод 405 запрещен.

Я указал, что делаю это в режиме отладки в VS, потому что я видел пару сообщений в Интернете, в которых люди сталкиваются с этой проблемой при развертывании и должны удалить WebDAV из IIS или добавить это:

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

в их config.web

Однако, поскольку я работаю из VS, он использует IIS Express, а файла web.config нет.

Я еще не пробовал публиковать API, так как он даже не работает локально на моей машине, поэтому мне кажется неправильным публиковать что-то, что сломано.

РЕДАКТИРОВАТЬ:

Итак, мой контроллер выглядит так:

public class TestController : ControllerBase
{

    public TestController()
    {
    }

    [HttpPost]
    private void Post()
    {
        Console.Write("TEST");
    }
}

person Fabricio Rodriguez    schedule 07.02.2019    source источник
comment
Где твой код? В POST нет ничего плохого, все сайты используют его, если только они не предназначены только для чтения. Даже учебники не работали бы, если бы формы не могли отправить на сервер POST.   -  person Panagiotis Kanavos    schedule 07.02.2019
comment
Кроме того, ASP.NET Core не использует web.config, если он не размещен на IIS. Сервер по умолчанию - Kestrel   -  person Panagiotis Kanavos    schedule 07.02.2019
comment
Правильно, пока вы не опубликуете, нет файла web.config. Вот почему я даже не могу попробовать предложенное мной в Интернете предложение о добавлении этих строк в файл web.config. Что касается образца кода, то здесь особо нечего публиковать ... в настоящее время у меня есть контроллер с одним простым действием без параметров, которое имеет Console.Write (TEST); в его теле и больше ничего. И он имеет украшение [HttpPost]. Если я изменю его на украшение [HttpGet] и сделаю запрос GET от Postman, то он заработает.   -  person Fabricio Rodriguez    schedule 07.02.2019
comment
Вам не нужен файл web.config во время отладки. Даже после публикации это не значит, что он вам нужен. Пустельге это не нужно. Разместите код.   -  person Panagiotis Kanavos    schedule 07.02.2019
comment
just one simple, parameterless action POST без тела? Как вы это назвали?   -  person Panagiotis Kanavos    schedule 07.02.2019
comment
Я отредактировал свой исходный вопрос, чтобы показать код контроллера   -  person Fabricio Rodriguez    schedule 07.02.2019
comment
Опубликуйте воспроизводимый пример, который действительно воспроизводит проблему. POST работает. Если бы это было не так, многие разработчики заметили бы это. Я бы тоже, так как у меня есть несколько проектов веб-API ASP.NET Core, использующих POST. Один из них даже использует загрузку файлов. Я могу использовать это в форме просто отлично. Я тоже могу использовать его с fetch   -  person Panagiotis Kanavos    schedule 07.02.2019
comment
У него был параметр, но я удалил его для тестирования, чтобы все было как можно проще. Однако он не работает, с параметром или без него ...   -  person Fabricio Rodriguez    schedule 07.02.2019
comment
Да, конечно, POST работает ... он просто не работает в этом проекте по какой-то причине ... Я успешно использовал его в других проектах ... Но все в порядке, спасибо. Я попробую разобраться.   -  person Fabricio Rodriguez    schedule 07.02.2019
comment
Вопросы, требующие помощи по отладке (почему этот код не работает?), Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для их воспроизведения в самом вопросе . См .: Как создать минимальный воспроизводимый пример.   -  person Ason    schedule 07.02.2019
comment
почему ваш метод публикации private?   -  person noobed    schedule 07.02.2019
comment
LGSon, я не уверен, какой самый короткий код, необходимый для его воспроизведения, будет ... Все зависит от того, в чем проблема. Если он находится в моем Startup.cs или моем Program.cs, то его, вероятно, тоже нужно будет включить. Но ладно, я попробую отредактировать свой вопрос, чтобы было лучше. Я просто подумал, что, возможно, у кого-то была похожая проблема, и они могли знать, как ее решить.   -  person Fabricio Rodriguez    schedule 07.02.2019
comment
Спасибо вам большое! Вот и все - я сделал свой метод действия закрытым, а не открытым! Хорошо подмечено! Большое спасибо!   -  person Fabricio Rodriguez    schedule 07.02.2019
comment
Я перешел на общедоступный, но все еще та же ошибка   -  person Howard Hee    schedule 30.05.2019


Ответы (1)


Как упомянул проницательный noobed, моя проблема заключалась в том, что действие моего контроллера было закрытым, а не общедоступным. Еще раз спасибо, noobed.

person Fabricio Rodriguez    schedule 07.02.2019
comment
Возможно, Nooby, но я столкнулся с той же проблемой! - person Quango; 12.04.2020