我已经成功实现了以下的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请求会带着一个空的练习到内部。为什么会这样呢?我原本以为
Flush()
可以防止这种情况发生。目前来看,我需要在所有受CORS保护的端点(PUT、DELETE)上添加对空值的检查。这似乎不太优雅...我是否能够防止OPTIONS请求触及控制器逻辑,而是直接使用所需的标头进行响应?