在Web API中启用CORS后,为什么会收到OPTIONS请求?

时间:2019-02-16 06:38:13

标签: angular asp.net-web-api asp.net-core cors

我有一个使用Angular Framework和Asp.net Core的项目。

在我的ConfigureServices中,有以下代码:

services.AddCors(options =>
            {
                options.AddPolicy(
                    "CorsPolicy",
                    builder => builder
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            });

然后按以下步骤取消配置:

 app.UseCors("CorsPolicy");
 app.UseMvc();

然后在 BaseApiController

中添加EnbaleCors属性
[EnableCors("CorsPolicy")]
public class BaseApiController : Controller

在Angular中添加以下内容:

return this.http
        .post(url, body, { headers: headers, withCredentials: true })
        .map((response: Response) => {
            return response as any;
        })

当我运行该应用程序时,我在网络中有2个请求,其中之一是请求方法:状态代码为204的选项,其他内容都没有。

我的问题在哪里?

感谢您抽出宝贵的时间分享您的想法

1 个答案:

答案 0 :(得分:1)

这不是问题,也不必担心。

  

出于安全原因,浏览器限制跨域HTTP请求   从脚本内部启动。例如,XMLHttpRequest和   提取API遵循同源政策。这意味着一个网络   使用这些API的应用程序只能从   加载应用程序的来源相同,除非来自   另一个来源包括正确的CORS标头。

OPTIONS请求只是跨源之间安全网络调用的安全检查。因此,当您发出这样的请求时,客户端会将OPTIONS请求发送到相同的地址,以确保可以安全地发送原始请求(GET / POST)。