Почему я получаю эту ошибку «Сообщение»: «Не найден ресурс HTTP, соответствующий URI запроса« http://www.nope-new.tk/nope/sms ».» - PullRequest
0 голосов
/ 08 января 2020

Я получаю ошибку при использовании POST api в Почтальоне. Мой API сделан в ASP. NET контроллер и выглядит следующим образом.

  [HttpPost]
        [Route("sms")]

        public HttpResponseMessage SendMessage(string body,string number)
        {

            return Request.CreateResponse(HttpStatusCode.OK,body);

        }

, но когда я пытаюсь нажать метод post на "http://www.nope-new.tk/nope/sms", используя форму Данные от почтальона я получаю эту ошибку.

Почему я получаю эту ошибку «Сообщение»: «Не найден ресурс HTTP, соответствующий URI запроса 'http://www.nope-new.tk/nope/sms'."

Но когда я использую «http://www.nope-new.tk/nope/sms?body=jkshdjka&number=%2B97798XXXXXXX», он получает статус успеха.

Есть ли проблема в моем URL или есть какая-то конкретная c причина?

1 Ответ

0 голосов
/ 08 января 2020

Произошла ошибка 404 not found из-за привязки параметра Query String по умолчанию для вашего метода API. Когда вы указываете два параметра, а именно body и number, маршрут по умолчанию, который вы указали в методе API с вашими параметрами, правильно вызывает API (который является вашим вторым URL).

Если если вы хотите POST ваших значений без использования метода Query String, вы можете использовать атрибут FromBody, который указывает, что параметр или свойство должны быть связаны с использованием тела запроса. При использовании атрибута FromBody вы указываете, что данные поступают из тела тела запроса, а не из URL-адреса запроса. Вы не можете использовать этот атрибут с HttpGet запросами, только с PUT, POST и DELETE запросами. Также вы можете использовать только один тег атрибута FromBody для каждого метода действия в Web API.

Теперь вы не можете связать одну примитивную строку, используя JSON и FromBody. Ваш API будет ожидать сложный объект (модель) от вашего JSON. Если вы хотите отправить только одну строку, вы можете использовать URL-кодировку. В заголовке вашего запроса укажите

Content-Type: application/x-www-form-urlencoded

Но правильным способом было бы создать структуру Model для ваших значений и затем отправить их на ваш API:

Создать модель и используйте это вместо этого.

Образец JSON тело во время запроса: {"body":"example","number":"1"}

C# Модель:

public class MyModel {
    public string body {get;set;}
    public string number {get;set} 
}

Метод контроллера

[HttpPost]
[Route("sms")]
public HttpResponseMessage SendMessage([FromBody]MyModel model)
{
  //Get your model values here
  string mybody=model.body;
  string mynumber=model.number;
  return Request.CreateResponse(HttpStatusCode.OK,body);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...