我让CORS使用以下内容:
[System.Web.Http.HttpPut]
[System.Web.Http.AcceptVerbs("OPTIONS")]
[System.Web.Http.Route("api/exercise")]
public HttpResponseMessage UpdateExercise(Exercise exercise) {
try {
_adminService.UpdateExercise(exercise);
return Request.CreateResponse(HttpStatusCode.OK, "Success");
} catch (Exception e) {
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
}
在我的global.asax
:
protected void Application_BeginRequest() {
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") {
Response.Flush();
}
}
但是发生了一些奇怪的事情 - 如果我在我的控制器中设置断点,OPTIONS请求会通过null
练习进入内部。为什么会这样?我希望Flush()
可以防止这种情况发生。
就目前而言,我需要为所有对CORS敏感的端点(PUT,DELETE)添加null检查。这似乎不够优雅......我是否应该能够阻止OPTIONS请求命中控制器逻辑,而只是直接响应所需的标题?
答案 0 :(得分:8)
根据问题中的评论,将此作为答案添加。
问题是由接受动作方法的OPTIONS
动词引起的。然后MVC运行时尝试执行动作方法&发生null
问题。
删除动词,因此MVC不会尝试执行方法& Application_BeginRequest
事件将为您解决飞行前问题。