gpt4 book ai didi

asp.net-core - "CORS policy execution failed"的日志请求

转载 作者:行者123 更新时间:2023-12-04 15:31:12 36 4
gpt4 key购买 nike

我的 ASP.NET Core 3.0 在特定配置/部署日志中:

[INF] CORS policy execution failed.
[INF] Request origin https://bla.com does not have permission to access the resource.



我如何在那时登录 资源要求调试?

(注意这个问题不是关于实际问题或解决它)
(请注意,我不是在全局增加日志级别等之后)

最佳答案

嗯,那个中间件被锁定得很厉害,我还没有找到任何明智的方法来连接它。
如果你想替换 CorsMiddleware ,你不能只在中间件上创建一个调用 Invoke() 的装饰器,因为你不知道发生了什么。
另一种解决方案可能是用装饰器替换服务集合中的 CorsService:ICorsService 注册,然后在将调用委托(delegate)给 CorsResult 后检查 EvaluatePolicy() 。这样你就可以在靠近原始消息发出的位置发出额外的日志消息。
但是还有另一种可能的解决方案,既非常简单又非常粗糙: 来检查请求中发生了什么。 尽管这与原始记录的消息有点远。
下面的代码是添加到管道中的委托(delegate)(在启动/配置中,在 .UseCors() 之前),用于检查请求是否是预检请求(与 CorsService 相同),如果成功,即存在 AccessControlAllowOrigin header 。如果它不成功,它会记录一条消息,其 EventId 和来源与 CorsService 相同。

app.Use(async (ctx, next) =>
{
await next();

var wasPreflightRequest = HttpMethods.IsOptions(ctx.Request.Method)
&& ctx.Request.Headers.ContainsKey(CorsConstants.AccessControlRequestMethod);
var isCorsHeaderReturned = ctx.Response.Headers.ContainsKey(HeaderNames.AccessControlAllowOrigin);

if (wasPreflightRequest && !isCorsHeaderReturned)
{
ctx.RequestServices.GetRequiredService<ILoggerFactory>()
.CreateLogger<CorsService>()
.LogInformation(new EventId(5, "PolicyFailure"),
$"CORS preflight failed at resource: {ctx.Request.Path}.");
}
});
根据我的测试,它似乎有效。 ¯\_(ツ)_/¯
它可能不是您要找的东西,但谁知道呢,也许它对某人有用。
(显然,处理这些事情的一个好方法是使用 结构化日志记录 解决方案,如 Serilog,并添加丰富器以捕获额外的请求信息,或手动将内容添加到诊断上下文中。但设置它要多得多涉及。)

关于asp.net-core - "CORS policy execution failed"的日志请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61241596/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com