【问题标题】:405 (Method Not Allowed) for POST method in angular405(不允许的方法)用于角度的 POST 方法
【发布时间】:2019-12-05 14:49:52
【问题描述】:

我正在尝试将 POSTGET 请求从 Angular 发送到 .Net Web api 项目 GET 请求工作正常,但是当涉及到 POST 请求时它不起作用,它给了我以下错误,

选项http://localhost:2073/api/MyAttendance/GetEvent 405(方法 不允许)访问 XMLHttpRequest 在 'http://localhost:2073/api/MyAttendance/GetEvent' 来自原点 'http://localhost:4200' 已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:它没有 HTTP 正常状态。

下面是我的POST 请求,

component.ts

 getDate() {
    let dateList: any = {};
    dateList.startDate = this.startDate;
    dateList.endDate = this.endDate;

    this._lkassetsService.getEventDetails(JSON.stringify(dateList)).subscribe((eventData: any) => {
        this.msg = eventData;    
     });
}

service.ts

getEventDetails(dateList: any): Observable<any> {
   return this._http.post('http://localhost:2073/api/MyAttendance/GetEvent', dateList, {
     headers:new HttpHeaders({ 
       'Content-Type': 'application/json'
     })
   });        
  }

下面是我来自后端的 .net web api 请求

[HttpPost]
[Route("api/MyAttendance/GetEvent")]
public string Event([FromBody]object Text)
{

    return "Success";
}

这个请求与邮递员配合得很好,在我的web.cong 文件(.net web api)中我添加了下面的代码,

   <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type"/>
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
      </customHeaders>
    </httpProtocol>   

如果我使用 'Content-Type': 'application/x-www-form-urlencoded' 而不是 'Content-Type': 'application/json' 它工作正常,但输出将为空,但我希望输出为 json 格式

我不知道这个问题如果有人可以帮助我,我非常感谢。我看到了很多解决方案,但没有奏效

【问题讨论】:

  • 能否添加Http请求的Asp.Net控制器?
  • 您可以使用 Angular 代理:angular.io/guide/build#proxying-to-a-backend-server
  • 您肯定需要启用 CORS,我不确定您在 web.config 中提供的内容是否足够。这是 .NET 核心还是 .NET 框架?
  • @GermanQuinteros 我添加了 .net 控制器请求

标签: c# angular asp.net-web-api


【解决方案1】:

我在我的项目中遇到了这个问题。我成功的方式是在 API 端进行这些更改。 (我们的 .net 框架版本是 4.6.1)

在 web.config 中

  <appSettings>
    <add key="Cors-Origins" value="http://localhost:4200" />
  </appSettings>

在 WebApiConfig.cs 中:

string origins = ConfigurationManager.AppSettings["Cors-Origins"];
config.EnableCors(new EnableCorsAttribute(origins, "*", "*") {SupportsCredentials = true});

【讨论】:

    【解决方案2】:

    不要使用GetEvent 以外的动作名称get 作为发布方法。如果您在操作名称中使用 get ,它将成为 get 方法

    【讨论】:

      猜你喜欢
      • 2014-05-23
      • 2016-04-27
      • 2021-07-07
      • 2016-12-04
      • 2013-10-01
      • 1970-01-01
      • 2018-12-20
      • 2015-11-16
      • 2016-05-15
      相关资源
      最近更新 更多