3 回答

TA貢獻1868條經驗 獲得超4個贊
因此,我找到了可行的解決方案。對于每個請求,我都會檢查它是否是CORS請求,以及該請求是否與OPTIONS動詞一起出現,表明它是預檢請求。如果是這樣,我只發(fā)送回一個空響應(當然只包含在IIS中配置的標頭),從而使控制器動作執(zhí)行無效。
然后,如果客戶端根據預檢返回的標頭確認允許執(zhí)行請求,則執(zhí)行實際的POST并執(zhí)行控制器動作。我的代碼示例:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin", StringComparer.OrdinalIgnoreCase) &&
Request.HttpMethod == "OPTIONS") {
Response.Flush();
}
}
如前所述,這對我有用,但是如果有人知道更好的方法或我當前實現中的任何缺陷,我將不勝感激。

TA貢獻1830條經驗 獲得超9個贊
接受的答案就像一個超級按鈕一樣工作,但是我發(fā)現請求實際上已經傳遞給了控制器。我正在接收200狀態(tài)代碼,但是響應主體包含許多HTML,但控制器中有異常。因此Response.Flush(),我發(fā)現最好使用而不是使用Response.End(),它確實會停止執(zhí)行請求。此替代解決方案如下所示:
編輯:修復了原始答案中的錯字。
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin", StringComparer.OrdinalIgnoreCase) &&
Request.HttpMethod == "OPTIONS") {
Response.End();
}
}
- 3 回答
- 0 關注
- 645 瀏覽
添加回答
舉報