添加 DelegatingHandler 后 WebAPI 2 出现间歇性 CORS 问题
Intermittent CORS Issue with WebAPI 2 after I added a DelegatingHandler
我已经根据以下片段创建了一个 WebAPI 2(完整框架 v4.7.x):
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class MyTestController : ApiController
{
public async Task<IHttpActionResult> GETSearchLatest20()
{
//etc...
}
}
,其中通过使用 EnableCors
属性标记每个方法来启用 CORS,如上所示
这一直没有问题。最近我在管道中引入了另一个处理程序,示例片段如下:
public class CustomInterceptor : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//...etc... logic here...
//call the inner handlers...
var response = await base.SendAsync(request, cancellationToken);
//logs... etc
return response;
}
}
此后,我现在在浏览器控制台上 间歇性地 收到可怕的被 CORS 策略消息阻止。
Access to XMLHttpRequest at
'http://localhost:8080/api/GETSearchLatest20/' from origin
'http://localhost:3000' has been blocked by CORS policy: No
'Access-Control-Allow-Origin' header is present on the requested
resource.
注意我是运行Visual Studio下的server/WebAPI。
我也不明白间歇性的部分;如果我在行上放置一个断点
var response = await base.SendAsync(request, cancellationToken);
,调用继续完成并且没有 CORS 错误(看起来有点停顿有帮助);如果我删除断点,那么阻塞消息是断断续续的。
有没有人有任何想法/解决方案来解决我的 CORS 问题?
我已经找出问题所在,间歇性错误是由于我在 CustomInterceptor : DelegatingHandler
.
中放置的逻辑造成的
添加 DelegatingHandler 会导致飞行前请求,因此 SendAsync
方法会非常快速地连续执行两次(这是我没有预料到的,因此出现了错误)。在第一次调用(飞行前)时,我的逻辑允许调用基本方法
var response = await base.SendAsync(request, cancellationToken);
,但在第二次调用(实际 GET)时,我的逻辑返回给客户端(“嘿,短时间内调用太多”),没有继续执行上述基本方法或内部处理程序!
因此浏览器将此绕过报告为 ...has been blocked by CORS policy: No 'Access-Control-Allow-Origin'...etc
。
我已经根据以下片段创建了一个 WebAPI 2(完整框架 v4.7.x):
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class MyTestController : ApiController
{
public async Task<IHttpActionResult> GETSearchLatest20()
{
//etc...
}
}
,其中通过使用 EnableCors
属性标记每个方法来启用 CORS,如上所示
这一直没有问题。最近我在管道中引入了另一个处理程序,示例片段如下:
public class CustomInterceptor : DelegatingHandler
{
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
//...etc... logic here...
//call the inner handlers...
var response = await base.SendAsync(request, cancellationToken);
//logs... etc
return response;
}
}
此后,我现在在浏览器控制台上 间歇性地 收到可怕的被 CORS 策略消息阻止。
Access to XMLHttpRequest at 'http://localhost:8080/api/GETSearchLatest20/' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
注意我是运行Visual Studio下的server/WebAPI。 我也不明白间歇性的部分;如果我在行上放置一个断点
var response = await base.SendAsync(request, cancellationToken);
,调用继续完成并且没有 CORS 错误(看起来有点停顿有帮助);如果我删除断点,那么阻塞消息是断断续续的。
有没有人有任何想法/解决方案来解决我的 CORS 问题?
我已经找出问题所在,间歇性错误是由于我在 CustomInterceptor : DelegatingHandler
.
添加 DelegatingHandler 会导致飞行前请求,因此 SendAsync
方法会非常快速地连续执行两次(这是我没有预料到的,因此出现了错误)。在第一次调用(飞行前)时,我的逻辑允许调用基本方法
var response = await base.SendAsync(request, cancellationToken);
,但在第二次调用(实际 GET)时,我的逻辑返回给客户端(“嘿,短时间内调用太多”),没有继续执行上述基本方法或内部处理程序!
因此浏览器将此绕过报告为 ...has been blocked by CORS policy: No 'Access-Control-Allow-Origin'...etc
。