Angular httpClient-POST成功,未发送任何参数

时间:2019-05-13 19:51:43

标签: angular ionic-framework ionic4 angular-httpclient

我正在尝试在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://server”访问“ http://localhost”处的XMLHttpRequest   已被CORS政策阻止:未响应预检请求   通过访问控制检查:它没有HTTP正常状态。

将标题更改为“ multipart / form-data”会导致错误415-不支持的媒体类型

编辑#2: 这适用于Postman和HTTPBot(iPhone),但不适用于我的Ionic应用程序

4 个答案:

答案 0 :(得分:0)

您有一些代码异味

首先,您需要将Content-Type更改为

  

“内容类型”:“多部分/表单数据”

所以您的代码将是这样

    headers: new HttpHeaders({
        "Content-Type": "multipart/form-data"
      })
    };

    return this.http
      .post(this.url + "SomeAction", asset , httpOptions)

和您的控制器中

public HttpResponseMessage SomeAction([FromForm]AccessData asset)

让我知道您是否仍然有问题

答案 1 :(得分:0)

正如您删除Content-Type标头时在错误中所说的那样:

  

CORS策略已阻止从来源“ http://server”访问“ http://localhost”处的XMLHttpRequest

答案 2 :(得分:0)

我改用Ionic native http plugin作为解决方案。不过,这还不是我的问题的结局。有关更多信息,请参见此question

答案 3 :(得分:0)

更新:我最终通过启用CORS解决了该问题。我已经在web.config中启用了CORS,并希望它能满足要求,但事实证明,我实际上确实需要安装Microsoft.AspNet.WebApi.Cors软件包并将[EnableCors]属性添加到我的post方法中。