【发布时间】:2019-05-23 03:37:05
【问题描述】:
我正在尝试在我的 Ionic4 应用程序中做一些非常基本的事情 - 将数据发布到 Asp.Net Web API 2 界面。请求成功,但是服务器没有收到数据。
import { HttpClient } from '@angular/common/http';
someAction(assetId: number) {
let asset = new FormData();
asset.append("assetId", assetId.toString());
asset.append("UserId", "1");
return this.httpClient.post(this.url + "SomeAction", asset, { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }).toPromise();
}
在服务器上(C#):
[HttpPost]
[Route("Service/SomeAction")]
public HttpResponseMessage SomeAction(AccessData asset)
{
return new HttpResponseMessage(_service.LogAsset(asset));
}
服务器上的asset 对象已实例化,但不包含客户端发送的值。
此外,删除/更改发送的标头会导致请求完全失败。
编辑: 删除标题会导致错误 404,并且在控制台中也有这个:
从源“http://localhost”访问“http://server”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应不 通过访问控制检查:它没有 HTTP ok 状态。
将标头更改为“multipart/form-data”会导致错误 415 - 不支持的媒体类型
编辑#2: 这适用于 Postman 和 HTTPBot (iPhone),但不适用于我的 Ionic 应用程序
【问题讨论】:
-
没有任何其他详细信息,您的 .NET WebAPI 是如何设置的。很确定您的 API 需要
JSON内容类型而不是x-www-form-urlencoded。您可以尝试将[FromBody]属性添加到您的AccessData参数。 -
@penleychan 我也怀疑这一点,但是更改/删除该标头会使请求失败 - 它甚至无法到达服务器。
-
您能否向我们展示当您尝试在没有该内容类型标头的情况下进行 POST 时出现的错误?
-
@favdev - 用更多信息编辑了我的问题
-
您在访问远程服务器吗?
标签: angular ionic-framework ionic4 angular-httpclient