我有一段時間讓Cors處理Web Api。我剛剛創建與默認模板的網頁API附帶的Visual Studio 2015年只有我做出了改變:CORS使用Web API時遇到問題2
Install-Package Microsoft.aspnet.webapi.cors
在WebApiConfig.cs ::註冊(HttpConfiguration配置):
var cors = new EnableCorsAttribute(
origins: "*",
headers: "*",
methods: "*");
config.EnableCors(cors);
我中的值控制器異步所作的POST
方法:
public async Task Post(Guid id)
我添加邏輯的少量post方法。
我打電話從其他項目中的網絡API在我的解決方案:
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("My-GUID",streamProvider.Guid.ToString());
var response = await client.PostAsXmlAsync("http://localhost.fiddler:2010/api/values", myXmlString);
if (response.StatusCode != HttpStatusCode.Created)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
}
請求:
POST http://localhost:2010/api/values HTTP/1.1
TRS-GUID: 2ca71b41-9e78-4216-a013-e45c6fd6cb4c
Content-Type: application/xml; charset=utf-8
Host: localhost:2010
Content-Length: 183
Expect: 100-continue
Connection: Keep-Alive
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"><?xml version="1.0" encoding="utf-8"?>
<root>
<MbrId>22</MbrId>
</root></string>
響應:
HTTP/1.1 405 Method Not Allowed
Cache-Control: no-cache
Pragma: no-cache
Allow: GET
Content-Type: application/xml; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?Qzpcc291cmNlXEFzeW5jRmlsZVVwbG9hZERlbW9cc3JjXEFwcFxhcGlcdmFsdWVz?=
X-Powered-By: ASP.NET
Date: Thu, 08 Oct 2015 14:33:08 GMT
Content-Length: 93
<Error><Message>The requested resource does not support http method 'POST'.</Message></Error>
就像我說我做了最小的變化,並通過本地運行IIS快遞。我一直在搜索並嘗試一些東西,但似乎沒有任何工作。我嘗試添加cors選項作爲屬性,但它導致了相同的事情。我還看到一篇文章提示「*」不在原始規範中,所以我嘗試了使用特定方法(POST,PUT,GET),但也沒有奏效。
編輯:
這是否與'預檢'請求有關?我只注意到在提琴手中的POST請求。我沒有看到它發送'選項'請求。如果這是問題不應該httpclient自動處理這個問題?
回答
非常感謝Darrel的回答。你可以告訴返回的錯誤信息是非常具有誤導性的,絕對聽起來像是一個CORS問題,但事實並非如此。我從來沒有意識到CORS只適用於瀏覽器。就像達雷爾說的那樣,這是一個路由問題。我把一個Guid作爲POST參數,導致沒有匹配的路由。錯誤的回報錯誤信息可能不會更有用。