c# - 即使我允许所有来源,为什么我会收到 CORS 错误?
问题描述
所以我使用 Vue 制作了一个 Web 应用程序,并且我使用 ASP.NET Web App (.NET 5) 作为后端。当我在本地运行 Web API 时,localhost:44393
它可以很好地从本地运行的客户端发出 POST 和 GET 请求。然后我点击“发布”将文件发送到我托管的地方。
此时,我将客户端用于向https://api.mywebsite.com发出请求的 URL 更改为与我现在发布它以来在本地运行的网站相同的网站。(它使用 fetch 发出这些请求fetch("https://api.mywebsite.com/TheController/AddServer"
,例如)
这就是它变得奇怪的地方,因为当我发出注册或登录的帖子请求时,它工作得很好,但是一旦我进入“添加帖子”,这是一个发布到 API 上不同端点的表单,我得到这个错误。
CORS 政策已阻止从源“https://mywebsite.com”获取“https://api.mywebsite.com/TheController/AddPost”的访问权限:不存在“Access-Control-Allow-Origin”标头在请求的资源上。如果不透明的响应满足您的需求,请将请求的模式设置为“no-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"
)
或者
.AllowAnyOrigin()
你不能一起使用它们
推荐阅读
- integer - Java中整数和int的区别
- windows - 在 Windows 批处理文件中捕获 git 提交日期(--format=%ci)?
- c++ - 如何让用户输入少于 10 个元素的数组 C++
- mysql - mysqldump 命令导出和导入表、视图、函数、程序
- r - NSE 挑战:突破 deparse(substitute(...))
- angularjs - 在控制器 AngularJs 中触发 ng-switch
- angular - 为什么在构造函数中初始化的成员变量在离子/角度的ngInit中未定义?
- android - 如何以编程方式设置整个应用程序的主题?
- java - 载运每个人的最少船只数量
- node.js - 反应 | 包.json | “代理”在 Google App Engine 中不起作用