3 回答
TA贡献1868条经验 获得超4个赞
因此,我找到了可行的解决方案。对于每个请求,我都会检查它是否是CORS请求,以及该请求是否与OPTIONS动词一起出现,表明它是预检请求。如果是这样,我只发送回一个空响应(当然只包含在IIS中配置的标头),从而使控制器动作执行无效。
然后,如果客户端根据预检返回的标头确认允许执行请求,则执行实际的POST并执行控制器动作。我的代码示例:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin", StringComparer.OrdinalIgnoreCase) &&
Request.HttpMethod == "OPTIONS") {
Response.Flush();
}
}
如前所述,这对我有用,但是如果有人知道更好的方法或我当前实现中的任何缺陷,我将不胜感激。
TA贡献1830条经验 获得超9个赞
接受的答案就像一个超级按钮一样工作,但是我发现请求实际上已经传递给了控制器。我正在接收200状态代码,但是响应主体包含许多HTML,但控制器中有异常。因此Response.Flush(),我发现最好使用而不是使用Response.End(),它确实会停止执行请求。此替代解决方案如下所示:
编辑:修复了原始答案中的错字。
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin", StringComparer.OrdinalIgnoreCase) &&
Request.HttpMethod == "OPTIONS") {
Response.End();
}
}
- 3 回答
- 0 关注
- 618 浏览
添加回答
举报