7

我有 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 请求击中控制器逻辑,而不是直接用所需的标头响应?

4

1 回答 1

8

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

问题是由接受OPTIONS动作方法上的动词引起的。然后 MVC 运行时尝试执行操作方法并null出现问题。

删除动词,以便 MVC 不会尝试执行该方法,并且该Application_BeginRequest事件将为您解决飞行前问题。

于 2014-06-17T14:21:19.200 回答