我们正在使用WebAPi2 cors lib Microsoft.AspNet.WebApi.Cors.5.2.3来启用跨域请求。 lib inturn使用消息处理程序来启用发出适当的响应,cors lib在webapiconfig.cs文件的全局级别附加
var enableCorsAttribute = new EnableCorsAttribute("*", "*", "*");`enter code
我们还使用自定义消息处理程序进行令牌验证。 令牌验证处理程序也附加在其下的全局
config.MessageHandlers.Add(new TokenValidationHandler());
混淆是哪个消息处理程序执行第一个cors处理程序或验证处理程序,根据文档首先附加的处理程序将被调用 http://www.asp.net/web-api/overview/advanced/http-message-handlers
但是首先调用自定义处理程序,也尝试更改顺序但是没有使用顺序执行是相同的,因此对于选项请求我绕过了对cors处理程序的请求
//Request is options bypass it
if (request.Method.Method.ToLower() == "options")
{
return base.SendAsync(request, cancellationToken);
}
cors消息处理程序理想情况下应该立即为选项http方法类型发送响应但是请求到达控制器级别,我们在控制器构造函数中设置Request上下文对象,它从当前线程读取声明但是选项方法它是对象null值因为没有选项方法的索赔,因此在调试模式下抛出预期。
任何帮助都将不胜感激。
提前致谢。