Код Angular 4 не попадает в контроллер ASP.Net Web Api - PullRequest
1 голос
/ 29 апреля 2019

Я работаю над проектом, в котором мне нужно сделать форму. Я могу получить все необходимые данные из базы данных точно после внесения изменений, я должен сохранить их в базе данных. Код работает должным образом на внешнем интерфейсе, в то время как он не затрагивает требуемый контроллер и метод в веб-интерфейсе Asp.Net. Здесь также не отображается никаких ошибок. Пожалуйста, дайте мне знать, что я должен сделать. Что я пропускаю. Я действительно волнуюсь

Это мой Api-путь, по которому я должен пройти

getlandingGatepassvalueByparameter(itemOrder:any){        
         let url="http://localhost:50366/api/CustomerOrder/SaveOrder"    
          return this._restService.Post(url,itemOrder);           

 }

Метод ниже в моем сообщении

Post(url: string, data: any): Observable<any[]> {debugger;
        let headers = new Headers({
            'Content-Type': 'application/json',
            'Authorization': 'Bearer ' 
        });
        let options = new RequestOptions({ headers: headers });
        return this._http.post(url, data,options)
            .map((response) => {
                debugger;
                return response.json();
            })
            .catch(e => {
debugger;
                return Observable.throw(e);
            });
    }
}

Ниже приведен метод контроллера, который я должен нажать на имя контроллера CustomerOrder

[System.Web.Http.HttpPost]
        public IHttpActionResult SaveOrder(List<ItemOrder> itemOrder)
        {
            string result = null;
            //result = _customerOrder.SaveOrder(itemOrder);
            if (result != null)
            {
                return Ok(result);
            }
            else


            {
                return null; ;
            }


        }

This is what I am sending These Are the values which are passing While after debugging I got this error on console

Ответы [ 3 ]

0 голосов
/ 29 апреля 2019

Попробуйте переформатировать объект запроса. Прямо сейчас это массив. Попробуйте сделать его объектом, который содержит свойство типа массива.

Подпись действия контроллера

public IHttpActionResult SaveOrder([FromBody] LargeOrder itemOrder)
{}

public class LargeOrder
{
    public List<ItemOrder> itemOrders {get; set;}
}

Угловой код:

getlandingGatepassvalueByparameter(itemOrder:any){        
         let url="http://localhost:50366/api/CustomerOrder/SaveOrder"    
          return this._restService.Post(url,JSON.stringify({"itemOrders":itemOrder}));           

 }
0 голосов
/ 30 апреля 2019

Ваш существующий код должен работать, но вы должны увидеть, что не так, попробовав шаг за шагом.

Вы можете попробовать с Promise:

Таким образом, ваш метод записи будет выглядеть так:

Post(url: string, data: any): Promise <any> {
  let headers = new Headers({
    'Content-Type': 'application/json'
  });

  return this._http.post(url, JSON.stringify(data), { headers: headers })
    .toPromise()
    .catch(this.handleError);
}

// to handle the error
private handleError(error: any): Promise<any> {
  return Promise.reject(error.message || error);
}
0 голосов
/ 29 апреля 2019

1) Добавьте [FromBody] в методе контроллера:

 public IHttpActionResult SaveOrder([FromBody] List<ItemOrder> itemOrder)

2) вызовите путем преобразования объекта с помощью json.stringify

getlandingGatepassvalueByparameter(itemOrder:any){        
         let url="http://localhost:50366/api/CustomerOrder/SaveOrder"    
          return this._restService.Post(url,JSON.stringify(itemOrder));           

 }

3) убедитесь, что ваша маршрутизация настроена правильнов приложении API.

...