【问题标题】:Angular 4 code is not Hitting the ASP.Net Web Api controllerAngular 4 代码未命中 ASP.Net Web Api 控制器
【发布时间】:2019-09-18 00:28:10
【问题描述】:

我正在做一个我必须制作表格的项目。在进行更改后,我可以准确地从数据库中获取所有需要的数据,我必须将其保存在数据库中。代码在前端正常工作,而它没有在 Asp.Net web Api 中达到所需的控制器和方法。这里也没有显示错误。请让我知道我必须做什么。我错过了什么。我真的很担心

这是我必须点击的 Api 路径

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

 }

我的 Post 方法中的以下一个

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; ;
            }


        }

【问题讨论】:

  • 试试:public IHttpActionResult SaveOrder([FromBody()] List&lt;ItemOrder&gt; itemOrder)
  • 并且错误与图像有关!你在哪里用过?
  • 我现在用了同样的结果
  • 我只是在前端使用了图像,它与服务器端没有连接。我使用了你建议的原因,但同样如此。仍然没有错误并且没有击中控制器
  • 按照您建议的方法完成

标签: angular asp.net-web-api asp.net-web-api2


【解决方案1】:

您现有的代码应该可以工作,但您需要逐步尝试找出问题所在。

你可以试试Promise:

所以你的 post 方法会是这样的:

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);
}

【讨论】:

    【解决方案2】:

    尝试重新格式化请求对象。现在它是一个数组。尝试将其设为包含数组类型属性的对象。

    控制器动作签名

    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}));           
    
     }
    

    【讨论】:

    • 很抱歉在使用您建议的方法后通知您同样的回复。
    【解决方案3】:

    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 应用程序中正确配置。

    【讨论】:

    • 不好意思说是一样的输出
    • 有时浏览器出现问题,因此请尝试清除缓存并重新构建您的 api 和 Angular 应用程序。
    猜你喜欢
    • 1970-01-01
    • 2021-12-16
    • 2012-09-04
    • 2014-06-01
    • 1970-01-01
    • 2013-10-03
    • 2016-07-12
    • 2013-04-14
    相关资源
    最近更新 更多