C# 为什么即使我';我允许所有的起源?
因此,我已经使用Vue制作了一个web应用程序,并将ASP.NET web应用程序(.NET 5)用作后端。 当我在C# 为什么即使我';我允许所有的起源?,c#,cors,asp.net-core-webapi,C#,Cors,Asp.net Core Webapi,因此,我已经使用Vue制作了一个web应用程序,并将ASP.NET web应用程序(.NET 5)用作后端。 当我在localhost:44393上本地运行Web API时,从本地运行的客户端发出POST&GET请求非常有效。 然后我点击“发布”将文件发送到我托管的地方 在这一点上,我更改了客户端用于向其发出请求的URL,该URL与我现在发布后在本地运行的URL是同一个网站。 (它使用fetch发出这些请求,因此它将是fetch(“https://api.mywebsite.com/TheCon
localhost:44393
上本地运行Web API时,从本地运行的客户端发出POST&GET请求非常有效。
然后我点击“发布”将文件发送到我托管的地方
在这一点上,我更改了客户端用于向其发出请求的URL,该URL与我现在发布后在本地运行的URL是同一个网站。
(它使用fetch发出这些请求,因此它将是fetch(“https://api.mywebsite.com/TheController/AddServer“
例如)
这就是它变得奇怪的地方,因为当我发出注册或登录的post请求时,它工作得很好,但当我转到“Add post”时,这是一个在API上发布到另一个端点的表单,我得到了这个错误
在'https://api.mywebsite.com/TheController/AddPost'
源于https://mywebsite.com'已被CORS阻止
策略:服务器上不存在“访问控制允许来源”标头
请求的资源。如果不透明响应满足您的需要,请设置
请求的模式为“无cors”,以获取禁用cors的资源
当我在本地运行web API时,这种情况不会发生。为什么只有在我将文件发布到主机并使用实际域后才会发生这种情况?
(当客户端也在本地运行时,我尝试从客户端发出相同的请求,但它给出了完全相同的异常)
我把问题中的域名改为mywebsite.com
,因为我不想分享它
这是我的配置服务
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("https://mywebsite.com",
"http://localhost:8080",
"https://mywebsite.com/add")
.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
});
});
...
和配置
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "mcraftserverapi v1"));
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors(MyAllowSpecificOrigins);
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapDefaultControllerRoute();
endpoints.MapControllers()
.RequireCors(MyAllowSpecificOrigins);
});
}
你必须移除
builder.WithOrigins("https://mywebsite.com",
"http://localhost:8080"
)
或
你不能同时使用它们啊!谢谢!:-)我不会将
.WithOrigins(…)
与.AllowAnyOrigin()一起使用。这是没有意义的,因为你说的是“这些起源都可以”,然后是“所有起源都可以”。我将尝试删除。WithOriginates(…)
。当我第一次只使用它时,我认为它可以工作,但结果是它不允许源代码,即使我指定了它。请参阅以下内容:尝试使用F12开发者网络工具检查响应头,它是否包含“Access Control allow origin”属性?如果它不包含属性,则必须添加它。此外,如果你的应用程序托管在IIS上,你可以尝试为该应用程序配置CORS。参考文献:。
.AllowAnyOrigin()