不能在 Angular 7 中使用 Post 方法

Posted

技术标签:

【中文标题】不能在 Angular 7 中使用 Post 方法【英文标题】:can't consume Post method in angular 7 【发布时间】:2019-07-19 06:19:22 【问题描述】:

我一直在做一个 Angular 项目。我应该通过 Web 服务(ASP.NET Web api 核心)从服务器获取数据。所以 GET 方法可以完美运行,但我不能使用 Post 方法。我得到这个错误

我的发帖方法

        [HttpPost]
    public IActionResult PostMerchandiser([FromBody] Presentent presentent)
    
        using (var db = new DMerchContext(ClientConnectionString))
        
            presentent.idElement = Guid.NewGuid().ToString();
            presentent.etat = 0;
            db.Add(presentent);
            db.SaveChanges();
            return Ok();
        
    

我也将此添加到我的 web.config 中

<customHeaders>
 <add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
 <add name="Access-Control-Allow-Headers" value="Content-Type, Accept, 
   Authorization" />
  <add name="Access-Control-Allow-Credentials" value="true" />
 <add name="Access-Control-Allow-Methods" 
  value="POST,GET,PUT,DELETE,OPTIONS" />
  <add name="Access-Control-Max-Age" value="1728000" />      
</customHeaders>

Angular 代码(服务)

import  HttpClient  from '@angular/common/http';
import  Injectable  from '@angular/core';
import  Observable  from 'rxjs';

import  Configuration  from '../Services/Configuration';
import  Merchandiser  from 'src/Models/Merchandiser';

@Injectable()
 export class MerchandiserService 
   private actionUrl: string;

constructor(public http: HttpClient, public configuration: Configuration) 

    this.actionUrl = configuration.serverWithApiUrl;

/////////////////////////////////////////// Login Services 
 /////////////////////////////////////////
public getMerchandisers<T>(): Observable<T> 
    return this.http.get<T>(this.actionUrl + 
 'Presentents/GetPresentents');


public PostMerchandiser<T>(merchandiser: Merchandiser): Observable<T> 
    return this.http.post<T>(this.actionUrl+'Presentents/PostMerchandiser', 
merchandiser);


有什么建议吗?

【问题讨论】:

你的 Angular 代码在哪里? 您必须在服务器 docs.microsoft.com/en-us/aspnet/core/security/… 上启用/设置 CORS 中间件(如果认为 web.config 仅适用于 IIS) @ChristianBenseler 立即查看 @WilliamLohan 非常感谢你,终于成功了 【参考方案1】:

您必须在服务器上启用/设置 CORS 中间件。我认为web.config 仅适用于 IIS。

您可以按照本指南 https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2 为 aspnetcore 完成此操作

注意:复制自comment,以便人们看到解决方案

【讨论】:

这是一个仅限链接的答案 -- 请提供有关如何回答问题的更多详细信息 @AK47 这是适用于 OP 的解决方案。除了重写 Microsoft 文档以在 SO 中设置 CORS 中间件之外,我不知道如何更详细地介绍 awnser 是“您必须在服务器上启用/设置 CORS 中间件”链接只是有关如何使用特定服务器框架工作的额外信息。这不仅仅是一个链接的答案。

以上是关于不能在 Angular 7 中使用 Post 方法的主要内容,如果未能解决你的问题,请参考以下文章

Spring / Angular 7 POST方法请求参数为空

在 Angular 7 中,为啥即使只订阅一次 HttpClient.post 也会执行两次?

使用 Angular 7 使用 HTTP API 进行 POST 和命令错误标头丢失

Angular 7/json 服务器:发布请求只接受 id

.Net WebAPI Post 方法在 Angular2 服务中不起作用

angular2 http.post 方法抛出 typeerror 异常