3 回答

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

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