首页 > 解决方案 > 无法在本地 ASP.NET Core MVC 服务之间进行跨源请求

问题描述

我有两个在本地运行的应用程序。一个是 Web 服务https://localhost:44365,另一个是 Web 应用程序https://localhost:44360。Web 应用程序需要访问 Web 服务。

Web 服务设置了一个 cors 策略,应该允许这样做:

// For running on local pc
services.AddCors(options =>
{
    options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
    });
    ...
    app.UseCors("CorsPolicy");
    app.useMvc();
    ...
}

当我运行这两个应用程序并在浏览器中点击 Web 应用程序时,我得到了跨源错误:

无法加载https://localhost:44365/api/users/current/avatarText:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问源“ https://localhost:44360 ”。响应的 HTTP 状态代码为 500。

服务中的标头(在 44365 处)是:

access-control-allow-credentials: true
access-control-allow-headers: content-type
access-control-allow-origin: https://localhost:44360

奇怪的是,我还在有问题的方法中显示了 500 服务器错误。虽然当应用程序(44360)调用它时,我能够逐步执行该方法(在 44365 中)并且该方法中没有 500。当呼叫不是跨源时,我可以成功呼叫它。

标签: asp.net-coreasp.net-core-mvc

解决方案


您应该使用AllowAllOrigins

options.AddPolicy("AllowAllOrigins",
    builder =>
    {
        builder.AllowAnyOrigin();
    });

来源:https ://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.1#set-the-allowed-origins

在允许来自任何来源的请求之前仔细考虑。允许来自任何来源的请求意味着任何网站都可以向您的应用发出跨域请求。

此设置会影响预检请求和 Access-Control-Allow-Origin 标头(本主题后面将介绍)。


推荐阅读