调用.net web api时,Angular Delete方法不传递飞行前请求

Posted

技术标签:

【中文标题】调用.net web api时,Angular Delete方法不传递飞行前请求【英文标题】:Angular Delete method doesn't pass pre-flight request when calling .net web api 【发布时间】:2019-09-22 01:37:53 【问题描述】:

我在 UsersController 上有删除方法:

public async Task<IHttpActionResult> DeleteUser(Guid id)
        
            User user = await db.Users.FindAsync(id);
            if (user == null)
            
                return NotFound();
            

            db.Users.Remove(user);
            await db.SaveChangesAsync();

            return Ok();
        

我已经通过安装包启用 Cors,在 WebApiConfig 中启用 cors 并将其添加到 web.config 中:

<system.webServer>
    <httpProtocol>
      <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>
  </system.webServer>

我在前端使用 Angular,并且我有需要删除方法的服务:

public delete = (route: string) => 
    return this.http.delete(this.createCompleteRoute(route, environment.urlAddress));
  

当我使用此函数拨打电话时,网址是:http://localhost:52474/api/Users/"some guid",但通话失败,说它没有通过飞行前请求。我需要在配置中添加其他内容吗?

【问题讨论】:

您是否正确定义了 DbContext 的 DI?由于 DI 的问题,我已经多次陷入这个问题。 不这么认为,因为当我尝试获取所有并获取方法时它工作正常:/ 好吧,所以我认为您从客户端发出的 http 请求可能有问题。我看到您在 web.config 中定义了“内容类型”,但在您的请求中您没有添加任何标题。尝试添加这样的标题: headers: new HttpHeaders( 'Content-Type': 'application/json' ) 作为 http.delete 方法的参数。 试过加了,还是一样:/ 你能把函数this.createCompleteRoute(route, environment.urlAddress)的结果贴出来 【参考方案1】:

我注释掉了 web.config 中的设置,并在控制器顶部添加了[EnableCors("*", "*", "*")],现在它可以工作了。

【讨论】:

所以问题出在 这行,也许你没有从客户端正确设置标题,因为使用此过滤器,您可以允许任何标题。

以上是关于调用.net web api时,Angular Delete方法不传递飞行前请求的主要内容,如果未能解决你的问题,请参考以下文章

在不同的端口上运行 Angular UI 和 Asp.net Web Api

Asp.Net Core Web API 5.0 和 Angular 中基于自定义角色的授权

在从 Angular 6 调用 ASP.NET Core Web API 的服务器异常上获取 CORS 错误 *only*

在同一个端口上运行 Angular 和 ASP.NET Web API

使用 MSAL 保护 ASP.Net Core Web API 和 Angular App

Visual Studio 中带有 ASP.NET Web API 项目的 Angular 项目