从 Typescript POST 到 Web API API,无法传递 JSON 对象

Posted

技术标签:

【中文标题】从 Typescript POST 到 Web API API,无法传递 JSON 对象【英文标题】:POST from Typescript to Web API API, unable to pass a JSON Object 【发布时间】:2017-05-26 18:36:26 【问题描述】:

我正在尝试将来自 typescript POST 调用的 JSON 对象传递给 Web API 方法。 Fiddler 显示该对象已转换为 JSON,并且 Content-Type 为“application/JSON”。但在 API 控制器上,参数值显示为 null 而不是 JSON。

打字稿:

createPO(product: string): Promise<string> 
   var headers = new Headers();
   headers.append('Content-Type', 'application/json');
   let options = new RequestOptions( headers: headers );
   return this._http.post(this._creatPOUrl, JSON.stringify(product), options)
   .toPromise()
   .then(response => <string>response.statusText)
   .catch(this.handleError);
   

网络 API: [HttpPost] 公共异步任务 CreatePOInMO([FromBody] 字符串产品) 返回确定();

产品包含空值。 如果我从 typescript(这是一个 JSON) 传递产品对象内部的实际值,它就可以工作。但我不能像这样硬编码。

我关注了这个帖子:Angular2 Service not passing JSON to WebAPI 但看起来我正在做这里提到的任何事情。

【问题讨论】:

您能发布您的 WEB-API 配置吗?我想 JSON 转换器不期望 JSON 格式与标准 JSON 相同,例如我在从前端发布 name: 'test' 时遇到了类似的问题,be 中的预期类是 Name: 'test ' 因为骆驼案例,WEB-API 标准转换器无法翻译响应。还有一个请求可能会有所帮助 【参考方案1】:

在Angular 2中,当posting JSON with the Http client时,你不应该调用JSON.stringify

this._http.post(this._creatPOUrl, product, options)

【讨论】:

将其更改为:var POCartItems = JSON.stringify(product);返回 this._http.post(this._creatPOUrl, POCartItems, options) 并在 Web API: [HttpPost]public async Task CreatePOInMO([FromBody] string POCartItems) 仍然无法正常工作。 我不确定你的意思。 JSON.stringify 呼叫不是必需的。查看链接的文档/指南。

以上是关于从 Typescript POST 到 Web API API,无法传递 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章

从0到1封装表单组件(TypeScript + Vue3.0 版)

TypeScript POST API 请求错误 400 - 错误请求

使用 JWT 的 API 客户端身份验证 — Node/TypeScript

循环内的承诺:TypeScript + Angular + IndexedDB

C#用httpclient模拟post到web网站上

从 POST 请求将文件保存到 Web 服务器