stevenlam505 Ответов: 1

Получение 405 ошибок при попытке разместить информацию JSON в webapi


Я пытался отправлять сообщения POST, где сообщение было из файла appsettings.json, который я преобразовал в строку.

Что я уже пробовал:

Программы.в CS
static async Task SendPost(string jsonMessage)
        {
            string url = "https://localhost:44312/GeneratorStatus";
            HttpClient client = new HttpClient();

            var response = await client.PostAsync(url, new 
            StringContent(jsonMessage, 
            Encoding.UTF8, "application/json"));

            Console.WriteLine(response);
        }


jsonMessage в этом случае-это просто строка, которая читается:
TestLaptop has encountered an error at 09.28.2020 09:15 AM/email1@gmail.com/email2@gmail.com/email3@gmail.com

Это мой контроллер:
GeneratorStatusController.в CS
[ApiController]
    [Route("[controller]")]
    public class GeneratorStatusController : ControllerBase
    {
        Emails emailList = new Emails();

        static List<string> strings = new List<string>()
        {
            "value0", "value1", "value2"
        };

        [HttpGet]
        public List<string> Get()
        {
            return strings;
        }

        [HttpPost("{input}")]
        public List<string> Post(string input)
        {
            strings.Add(input);
            return strings;
        }
    }


Когда я запускаю свою программу.cs, имея IIS express, размещающий мой сервер, я продолжаю получать ошибку 405 при запуске program.cs. Это полная переменная "ответа" :
StatusCode: 405, ReasonPhrase: 'Method Not Allowed', Version: 1.1, Content: System.Net.Http.HttpConnectionResponseContent, Headers:
{
  Transfer-Encoding: chunked
  Server: Microsoft-IIS/10.0
  X-Powered-By: ASP.NET
  Date: Mon, 28 Sep 2020 13:18:49 GMT
  Allow: GET
}
[09:18:49 INF] Ending service

1 Ответов

Рейтинг:
6

ZurdoDev

Вы не вызываете метод. Ваш url-адрес просто https://localhost:44312/GeneratorStatus


stevenlam505

Разве это не " ждите клиента.PostAsync(url, new StringContent(jsonMessage, Encoding.UTF8, "application/json"));" вызов метода PostAsync на клиентском объекте?

ZurdoDev

Это так, но url-адрес вызывает GeneratorStatus, который является просто контроллером. Это не вызов действия или метода в контроллере.

Это должно быть .../GeneratorStatus/SomeMethod

stevenlam505

а ну понятно. Нужно ли добавить новый метод в GeneratorStatusController или просто использовать ".../GeneratorStatus/Post"? Если бы я добавил новый метод, какой метод я должен добавить?

ZurdoDev

Все зависит от того, чего вы хотите. Я бы предложил изменить названия ваших методов с Get и Post на что-то вроде GetStrings и PostStrings. Затем в вашем url-адресе, если вы хотите вызвать GetStrings, вы добавите это в конец вашего url-адреса.