我已经在C#.net Core中的项目上启用了CORS
在startup.cs
中,我添加了行
...
services.AddCors();
...
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
但是当我尝试在另一个Blazor
项目中使用API时,在主机上我的API项目的日志中看到了此错误
CORS协议不允许指定通配符(任何)来源 和凭据同时显示。通过列出配置策略 如果需要支持凭据,则为单个来源
我在Blazor
中的代码
using (HttpClient http = new HttpClient()) {
http.DefaultRequestHeaders.Add("Authorization", "Token");
var response = await http.GetStringAsync("https://example.com?prm=2");
Console.WriteLine(response);
dynamicContent = response;
}
启用Cors之前,我会在浏览器控制台中看到另一个错误
要解决此问题我可以改变什么?
答案 0 :(得分:33)
我也遇到了同样的问题,并且在这里找到了解决方法:
Setup Any Origin And Any Credentials
像这样在startup.cs文件中更改CORS设置
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
builder.SetIsOriginAllowed(_ => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
}
对我有用。
答案 1 :(得分:27)
有点晚了,但我希望它对某人有帮助。
如果您想同时使用ComplaintsController
和AllowCredentials()
,只需使用AllowAnyOrigin()
SetIsOriginAllowed(Func<string,bool> predicate)
答案 2 :(得分:9)
我遇到了同样的问题,因此我删除了allowCredentials()
,从而为我解决了这个问题。
答案 3 :(得分:6)
您应该已经提供了其余的代码... 这是Blazor客户端应用程序还是Razor组件应用程序(正式称为服务器端Blazor)? 我猜这是Blazor客户端应用程序,对吧? 为什么要实例化HttpClient?您应该改用DI(也许是构造函数注入),注入Blazor本身提供的HttpClient实例。
问题可能是服务器端,尽管它是作为客户端出现的...
请尝试以下操作:
1.获取https://www.nuget.org/packages/Microsoft.AspNetCore.Cors/
2.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
.....
}
这:
public void Configure(IApplicationBuilder app,
IHostingEnvironment env)
{
app.UseCors("CorsPolicy");
}
请再次注意:需要在服务器端而不是直接启用CORS。有关如何在ASP.NET Core中启用CORS的详细信息,请参见https://docs.microsoft.com/en-us/aspnet/core/security/cors。
blazor:
@page "/<template>"
@inject HttpClient Http
@functions {
protected override async Task OnInitAsync()
{
var response= await Http.GetJsonAsync<string>
("https://example.com?prm=2");
}
}
希望这对您有帮助...
答案 4 :(得分:4)
您不能同时使用AllowAnyOrigin()
和AllowCredentials()
因此将您的代码更改为:
...
services.AddCors();
...
app.UseCors(builder => builder
.WithOrigins("https://example.com")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
答案 5 :(得分:0)
步骤1
安装nuGet软件包:
Microsoft.AspNetCore.Cors
第2步 添加
services.AddCors();
在startup.cs中的ConfigureServices下
第3步 添加
app.UseCors(x => x
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => true) // allow any origin
.AllowCredentials());
在startup.cs中的“配置”下
答案 6 :(得分:-1)
我遇到了同样的问题,通过从URL末尾删除斜杠( / )解决了该问题,因为我总是从chrome浏览器中复制并粘贴url,它的末尾带有 / :
.WithOrigins("https://localhost:60576/") // not working
但是
.WithOrigins("https://localhost:60576") // working !!!