2
我在發佈請求中設置應用程序/ json標頭的內容類型時遇到問題。在Angular2 HTTP POST中設置JSON請求標頭
saveUpdates(alltabs: AllTabs): Observable<Response> {
let api = this.host + this.routes.save;
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this._http.post(api, JSON.stringify(alltabs), { headers: headers })
.map((response: Response) => <Response>response.json())
.do(data => console.log("saveUpdates(): " + data))
.catch(this.handleError);
}
請求報頭:
OPTIONS /api/productsave HTTP/1.1
Host: wbtest:92
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: POST
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36
Access-Control-Request-Headers: content-type
Accept: */*
Referer: http://localhost:3000/product/60000010080
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
響應頭:
HTTP/1.1 405 Method Not Allowed
Cache-Control: no-cache
Pragma: no-cache
Allow: POST
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Date: Tue, 14 Jun 2016 15:16:15 GMT
Content-Length: 76
正如你看到的,我的要求有兩個意想不到的標題添加 「訪問控制請求報頭」 和「訪問控制請求法」。這似乎表明CORS(跨源資源共享)存在問題。但是,API服務器上的web.conf文件一直在工作,並且響應標頭指出「Access-Control-Allow-Origin:*」。
任何想法可能是錯誤的?
UPDATE:
上面的代碼是正確的 - 問題是與不被配置爲處理預檢請求Sever的代碼。就我而言,.NET Web API 2應用程序未配置爲允許CORS。
我認爲你是正確的(Chrome,但是狀態 「預檢響應無效HTTP」),但加入「<添加名稱= 「Access-Control-Allow-Methods」value =「GET,PUT,POST,DELETE,OPTIONS」/>「和」 到我的web.conf仍然給出同樣的問題。 –
我不知道你用於你的服務器,但通常有事情要做。例如對於Node,您需要在Express中定義一箇中間件來處理OPTIONS方法。請參閱https://www.npmjs.com/package/cors –
感謝蒂埃裏。看來我們的.NET Web API 2應用程序未配置爲處理預檢請求。 –