来自 C# 控制器的 Angular http post formData 不受支持的媒体类型

Posted

技术标签:

【中文标题】来自 C# 控制器的 Angular http post formData 不受支持的媒体类型【英文标题】:Angular http post formData unsupported media type from C# Controller 【发布时间】:2020-04-06 07:05:35 【问题描述】:

我尝试执行的(Angular)代码如下所示:

   this.http.post(url, formData, httpOptions).subscribe(  
          (data) =>  
            console.log(data);
          ,
          (error) => 
            console.log(error);
          );

formData 很简单:

const formData = new FormData();
formData.append('listNetworkConstituents', JSON.stringify(params));

尝试了很多选项,包括:

   const httpOptions = 
      headers: new HttpHeaders(
        'Content-Type': 'application/x-www-form-urlencoded'
      )
    

我已经验证了参数数据,Json 没有遇到任何问题。 Fiddler 确认请求到达服务器然后被拒绝: “服务器响应状态为 415(不支持的媒体类型)”

我知道 FormData 的使用在其他地方对这个服务器起作用。

有什么想法吗?提前致谢。修行者

【问题讨论】:

【参考方案1】:

HTTP 415 Unsupported Media Type 客户端错误响应代码表示服务器拒绝接受请求,因为负载格式是不受支持的格式。

格式问题可能是由于请求指定的 Content-Type 或 Content-Encoding,或者是直接检查数据的结果。

以上摘录来自:https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/415

请比较您标头中的内容类型和内容编码,并确保正在侦听此调用的 URL 期望您发送的类型。

你可以做的事情

转到目标 API/URL 并查看其设置,看看它接受什么格式。 使用 Postman 或其他实用程序进行相同的调用,看看它是否通过 对比你发送的json body,看看有没有问题

【讨论】:

Jawad:这看起来是个好建议。服务器当前正在 Visual Studio 中运行 - 调试。您是否知道我可能会看到内容编码和类型的设置?再次感谢。 在这里尝试了代码,它返回了很好的信息。 ***.com/a/11945256/1390548 哇...所以代码可能没问题。那么我需要专注于服务器。

以上是关于来自 C# 控制器的 Angular http post formData 不受支持的媒体类型的主要内容,如果未能解决你的问题,请参考以下文章

angular 1 promise call http 有效,但不适用于来自 json 结构的假数据,promise.then 不是函数

在 node.js/angular 应用程序中查询来自不同主机的数据时,如何遵守访问控制起源异常? [复制]

如何使 Angular POST 到 C# Asp.Net MVC 控制器?

Angular 控制器生命周期和事件处理

Angular 6 + Spring Boot:错误:“来自原点 'http://localhost:4200' 已被 CORS 策略阻止”

使用来自 API 的 $http.get 进行 Angular.js 本地开发