我有一個Web服務器上的一個小的Web API應用程序,一個GET方法返回3條記錄,一個POST方法接受一個對象,然後分配它是一個ID並返回相同的對象。訪問控制允許的方法似乎並沒有工作
我正在從本地web應用程序進行ajax調用,並測試了我的CORS實現。到目前爲止,幾乎所有的東西都運行良好。如果我沒有指定Access-Control-Allow-Origin(現在只設置爲*
),我的呼叫就不允許(我期望的),但我也試過指定Access-Control-Allow-Methods,而不是看起來像我的輸入限制了特定的來電。
例如,這是我的web.config包含:
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type, Authorization, Accept, X-Requested-With " />
<add name="Access-Control-Allow-Methods" value="OPTIONS, GET" />
</customHeaders>
</httpProtocol>
我只有OPTIONS
和GET
上市,但我仍然能夠作出POST請求。同樣,如果我將它設置爲"OPTIONS, POST"
,我仍然可以發出GET請求。
編輯
基於從@geekonaut答案下面我能夠看到的,我期望這個功能。我試圖嘗試一個PUT
請求,而不是GET
或,但後來發現有一個錯誤,即OPTIONS
(印前檢查)請求不被允許。我首先需要在我的Global.asax.cs
文件中添加一個部分來接受該方法,然後如果我在我的web.config的Access-Control-Allow-Methods
值中添加/刪除PUT
,我發現只有在列出該方法時才允許使用該方法。
protected void Application_OnBeginRequest()
{
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.StatusCode = 200;
HttpContext.Current.Response.End();
}
}
從任何請求之後預檢請求或報頭的任何有用的信息? –
任何具體我應該找?我發現它正在嘗試一個POST請求,並且Access-Control-Allow-Methods的值是'OPTIONS,GET',所以似乎所有事情都是在飛行前正確設置的。 – Goose
我沒有真正進入asp.net,但是你是否嘗試過類似**過濾器中的動詞**部分提到的配置[https://www.iis.net/learn/manage/configuring-security/use -request-filtering](https://www.iis.net/learn/manage/configuring-security/use-request-filtering),我開始認爲服務器可能只發送頭文件,而沒有真正的驗證的客戶端請求。 –