首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角+ Asp Core 2 http Post数据始终为空

角+ Asp Core 2 http Post数据始终为空
EN

Stack Overflow用户
提问于 2018-07-04 12:04:24
回答 2查看 2.3K关注 0票数 1

我为这个问题挣扎了很长时间。

我有一个客户端应用程序集与角6和WebApi创建的ASPCore2.1。

对于我的帖子请求,我做了这样的事情。

代码语言:javascript
运行
复制
const params = {
  TestData: newActions,
  ExportAndExecute: true
};

this.httpClient.post('/tests/export', params, {headers: {}}).subscribe((result) => {
  console.log(result);
});

其中httpClient.post方法是:

代码语言:javascript
运行
复制
post(route: string, params: any, headers: object) {
return new Observable<any>(subscriber => {
  this.httpClient.post<any>(this.baseUrl + route, params, headers).subscribe((result) => {
    subscriber.next(result);
  }, (error: Response) => {
    this.handleRequestError(error);
  });
});

}

我的API控制器操作如下所示:

代码语言:javascript
运行
复制
[HttpPost]
[Route("/api/[controller]/export")]
[Authorize(AuthenticationSchemes = "JwtBearer")]
public async Task<HttpStatusCode> ExportTest( [FromBody] ExportTestModel model)
{
    var result = HttpStatusCode.MisdirectedRequest; 
}

模特儿班是:

代码语言:javascript
运行
复制
public class ExportTestModel
{
    public List<BsonDocument> TestData { get; set; }
    public bool ExportAndExecute { get; set; }
}

我不知道为什么每次从客户端发送数据时,控制器操作中的数据都是空的。我试着把它作为一个字符串化的对象发送,在控制器中以objectJObject的形式接收,但是没有任何东西能像预期的那样工作。

我可以补充说,如果我以JObject的形式接收数据,我可以正确地看到它,但我不想这样做。

我觉得自己很蠢,但也许有人能指出我的做法有什么不对。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-04 12:17:30

看看您的示例代码,我想到了两个选项:

  1. 头不对。因为您显式地将空header对象设置为第三个参数,这可能会导致不为您要发送的内容类型(application/json)添加默认的HTTP标头。如果您不告诉ASP.NET核心您发送的是什么类型的数据,那么ASP.NET Core并不关心它,也不应用模型绑定。解决这个问题非常容易,只需删除this.httpClient.post()调用中的第三个参数即可。 This.httpClient.post(/test/export,params).subscribe(结果=> {console.log(结果);}); 您可以通过检查web开发人员工具栏中的网络流量来验证此标头是否设置。
  2. 对案件敏感。在JavaScript (因此也是JSON)中,骆驼套管是标准的.您的params对象有一个TestData和一个ExportAndExecute,它们都是pascal大小写的。这可能是模型粘合剂是敏感的情况。
票数 1
EN

Stack Overflow用户

发布于 2018-07-04 13:06:52

这适用于我使用角6 HttpClient和Asp.Net Core2.0或2.1

在您的控制器中:

代码语言:javascript
运行
复制
const params = {
  TestData: newActions,
  ExportAndExecute: true
};

this.dataService.postData(params).subscribe( 
    data => {
       console.log('post OK !');
    },
    error => {
       console.log('post error !');
    }
);

为您服务:

代码语言:javascript
运行
复制
  constructor( private http: HttpClient ) {}

  const headers = new HttpHeaders()
     .set('Content-Type', 'application/json')
     .set('Accept', 'application/json')

  const url = 'http://localhost:5000/api/'  

  postData( params ) {
     return this.http.post(
        url + 'grupos',
        JSON.stringify(params),
        { headers: headers }
     );        
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51173290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档