Как использовать http.post в angular / cli? - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в angular, и при попытке отправить строку в веб-API из проекта angular параметр в методе публикации веб-API всегда имеет значение null. Если я использую [FromBody], сам метод публикации не вызывается. Если я удалю [FromBody] из метода Post. Метод вызывается, но значение параметра равно null. Может ли кто-нибудь помочь мне здесь !!

SendTODB(db:Event)
{
  
  this.http.post('https://localhost:44301/Student',this.inpuctstexts).subscribe((data)=>(<HTMLInputElement>db.target).value);
} 

В My WebApi:

[ApiController]
    [Route("[controller]")]
    public class StudentController : ControllerBase
    {
        [HttpGet]
        public ActionResult<List<Student>> StudentList()
        {
            List<Student> student = new List<Student>();
            student.Add(new Student() { StudentName = "Mike", Marks = "200" });
            student.Add(new Student() { StudentName = "Jack", Marks = "250" });
            student.Add(new Student() { StudentName = "Jacob", Marks = "300" });
            student.Add(new Student() { StudentName = "John", Marks = "500" });
            return (student);

        }

        [HttpPost]
        public ActionResult<string> student(string input)
        {
            return input;
        }
    }

Это мой angular код

Это мой класс контроллера WebApi

Ответы [ 3 ]

0 голосов
/ 06 августа 2020

Вот что делает formbody:

Когда параметр имеет [FromBody], веб-API использует заголовок Content-Type для выбора средства форматирования. В этом примере тип контента - «application / json», а тело запроса - это необработанная строка JSON (не объект JSON). Из тела сообщения можно читать не более одного параметра.

проверьте этот ответ:

Строковый параметр FromBody дает значение null

0 голосов
/ 06 августа 2020

Я думаю, вам нужно установить заголовок, и [FromBody] потребуется в API. Измените свой сервисный код на

SendTODB(db:Event)
{
   const header = {
 'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Access-Control-Allow-Headers': 'Content-Type',
    }
    
   const headerOptions = {                                                                                                                                                                                 
     headers: new Headers(header), 
   };
    
   const data = JSON.stringify(inpuctstexts);

   return this.http.post(https://localhost:44301/Student, data, headerOptions)
          .subscribe((data)=> {
                  // your code will go here
               }) ;
}

Если это не сработает, создайте модель в своем API

    class RequrestModel{
    
    public string input {get;set;}
    }


 [HttpPost]
        public ActionResult<string> student([FromBody]RequestModel request)
        {
            return request.input;
        }
  

С вашего внешнего интерфейса

SendTODB(db:Event)
    {
           const header = {
      'Content-Type': 'application/json',
      'Accept': 'application/json',
      'Access-Control-Allow-Headers': 'Content-Type',
        }
        
       const headerOptions = {                                                                                                                                                                                 
         headers: new Headers(header), 
       };

      const dataModel = {
       input = inpuctstexts;
       }
        
       const data = JSON.stringify(dataModel);
    
       return this.http.post(https://localhost:44301/Student, data, headerOptions)
              .subscribe((data)=> {
                      // your code will go here
                   }) ;
    }

Это будет работать

0 голосов
/ 06 августа 2020

HttpClient, вероятно, использует application / json как тип содержимого по умолчанию, поэтому попробуйте обернуть свою полезную нагрузку в объект на обоих концах.

...