Angular 为什么在Web API中启用CORS时会收到选项请求?

Angular 为什么在Web API中启用CORS时会收到选项请求?,angular,asp.net-web-api,asp.net-core,cors,Angular,Asp.net Web Api,Asp.net Core,Cors,我有一个带有Angular框架和Asp.net核心的项目 在我的配置服务中,我有以下代码: services.AddCors(options => { options.AddPolicy( "CorsPolicy", builder => builder .AllowAnyOrigin()

我有一个带有Angular框架和Asp.net核心的项目

在我的配置服务中,我有以下代码:

services.AddCors(options =>
            {
                options.AddPolicy(
                    "CorsPolicy",
                    builder => builder
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials());
            });
并按如下方式取消配置:

 app.UseCors("CorsPolicy");
 app.UseMvc();
然后在BaseApiController中添加了EnbaleCors属性

具体如下:

return this.http
        .post(url, body, { headers: headers, withCredentials: true })
        .map((response: Response) => {
            return response as any;
        })
当我运行应用程序时,我在网络中有2个请求,其中一个请求方法:状态代码为204无内容的选项,另一个在我的请求中

我的问题在哪里


感谢您抽出时间与我们分享您的想法

这不是问题,不必担心

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


选项请求只是对跨来源之间的安全网络呼叫进行安全检查。因此,当您发出此类请求时,客户端将向同一地址发送选项请求,以确保安全地发送原始requestGET/POST。

@arcreezy Thank,我可以在生产环境中禁用或隐藏此选项请求吗?@SaeidMirzaei我认为如果客户端和服务器位于不同的域中,您不能禁用客户端发送CORS请求。通过将请求的内容类型更改为application/x-www-form-urlencoded或multipart/form data或text/plain,可能有一种解决方法,但我不鼓励这样做。我没有任何不同的域,我有两个子域,如“api.my doamin.com”和“client.my doamin.com”。在这种情况下可以吗?@SaeidMirzaei我指的是不同域的客户端和服务器,而不是URL。正如我所说的,它不会引起任何问题。
return this.http
        .post(url, body, { headers: headers, withCredentials: true })
        .map((response: Response) => {
            return response as any;
        })