cors - 405 方法不允许在 ASP.NET 5 WebApi OPTIONS 预检
问题描述
我正在尝试在我的应用程序中集成 CORS 策略。为此,我需要使用两个策略,因此我按照使用属性启用 CORS 的说明进行了以下操作。作为记录,我将 CORS 配置包装在一个扩展中,并从配置中加载列入白名单的端点。
public static IServiceCollection ConfigureCors(this IServiceCollection serviceCollection,
IConfiguration configuration)
{
return serviceCollection
.AddCors(cors => cors.AddPolicy(CORS_POLICY_STRICT, policy =>
policy
.WithOrigins()
.WithMethods("POST")
.WithHeaders("Authorization")
))
.AddCors(cors =>
cors.AddPolicy(CORS_POLICY_FE_API, policy =>
policy
.AllowAnyMethod()
.AllowAnyHeader()
.WithOrigins(GetFrontEndOrigins(configuration))
))
;
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app
.UseHttpsRedirection()
.UseRouting()
.UseCors()
.UseAuthentication()
.UseAuthorization()
.UseEndpoints(endpoints => { endpoints.MapControllers(); })
;
}
public void ConfigureServices(IServiceCollection services)
{
services
.ConfigureCors(Configuration)
.AddControllers()
;
}
CORS_POLICY_STRICT
应该是 BE-2-BE 调用的策略,而CORS_POLICY_FE_API
必须登记 localhost 和 prod+dev FE 微服务 URL。
[EnableCors(<POLICY_NAME_CONST>)]
我在适当的地方注释了控制器。
我的问题是应用程序启动时没有错误,Swagger 可以工作,但我什至无法在 cUrl/PowerShell 中运行预检请求,也不能从部署在另一个端口(通常为 4200)的 localhost 上的 Angular 应用程序调用代码。
获取任何带有注释的 API URLEnableCorsAttribute
> Invoke-RestMethod -Method Options -Uri "https://localhost:5001/api/v1/secure/SomeController/someMethod" -Headers @{"Access-Control-Request-Method"="POST";"Access-Control-Request-Headers"="X-Requested-With"}
$ curl -X OPTIONS "https://localhost:5001/api/v1/secure/SomeController/someMethod" -i
两者都返回 405 Method Not Allowed
那有什么问题?
我还尝试将简单UseCors()
调用替换为两个调用,UseCors(string)
每个调用使用一个策略键。只有策略名称是参数,因为我将从服务配置策略。
解决方案
最终它起作用了,因为我已将不需要的空间配置http://localhost :4200
为允许的来源之一
推荐阅读
- java - 同一事务中mybatis删除表中所有数据后,实体仍然可以被选中
- python - 错误:无法从版本中找到满足 Django==1.10.5 要求的版本:无错误:找不到匹配的发行版 Django==1.10.5
- three.js - 不透明度为 0 的 Three.js 对象仍会遮挡其他点材质,如何避免这种干扰?
- javascript - 在 D3.js v6 中为日期字段自动调整轴刻度增量以避免重叠的最佳方法是什么?
- c++ - 如何实现这种类型的数据结构?
- c++ - 如何在 C++ 中添加异步等待?
- go - DataflowRunner 无法执行
- c# - 如何更新 linq2db 中的两列?
- flutter - RenderIndexedSemantics 对象在布局期间被赋予了无限大小。当我使用脚手架楔形
- string - Discord.py 列表索引必须是整数或切片,而不是 str