2015-10-08 26 views
1

我有一段時間讓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/">&lt;?xml version="1.0" encoding="utf-8"?&gt; 
&lt;root&gt; 
    &lt;MbrId&gt;22&lt;/MbrId&gt; 
&lt;/root&gt;</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參數,導致沒有匹配的路由。錯誤的回報錯誤信息可能不會更有用。

回答

2

HttpClient沒有交叉限制。這完全是一個Web瀏覽器的限制。您不需要爲HttpClient請求實施CORS。

嘗試通過fiddler發送POST請求,看看是否有效。我懷疑你可能只是有路由問題。