WebAPI CORS - 为什么OPTIONS请求进入我的控制器?

时间:2014-06-16 23:46:52

标签: asp.net-web-api cors asp.net-web-api2 http-options-method

我让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请求命中控制器逻辑,而只是直接响应所需的标题?

1 个答案:

答案 0 :(得分:8)

根据问题中的评论,将此作为答案添加。

问题是由接受动作方法的OPTIONS动词引起的。然后MVC运行时尝试执行动作方法&发生null问题。

删除动词,因此MVC不会尝试执行方法& Application_BeginRequest事件将为您解决飞行前问题。