2

web.api プロジェクトを空にし、Microsoft.aspnet.webapi.cors 5.2.3 をインストールし、追加します。

config.EnableCors();

webapiconfig に。コントローラーとアクションを作る

public class HomeController : ApiController
{
    [EnableCors("*" , "*" , "*")]
    public async Task<string> Get()
    {
        return await Task.FromResult("omg");
    }
}

アプリをデバッグし、フィドラーをロードして、http://localhost:61939/api/Homeへのリクエストを実行します。

CORS ヘッダーはありません。web.config には以下が含まれます。

<system.webServer>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

私は何が欠けていますか?Get メソッドへのすべてのリクエストに Access-Control-Allow-Origin ヘッダーが挿入されないのはなぜですか?

また、web.configでCORSを定義するという答えは答えではありません...ある時点で、オリジンチェックを追加し、場合によってはHTTPメソッドを次のようにチェックする必要があります。

if(requestContext.HttpMethod == "POST" && (origin == "https://someplace.com" || origin == "http://localhost"))
4

1 に答える 1

5

CORS を有効にするにはこれで十分です。次のコードを使用して、すべてのコントローラーで CORS を有効にすることもできます。

 var cors = new EnableCorsAttribute("*", "*", "*"); 
 config.EnableCors(cors); 

どのようにテストしているのかわかりませんが、リクエストにOriginヘッダーが含まれている場合にのみ、ヘッダーが返されることに注意してくださいAccess-Control-Allow-Origin。リクエストでオリジン ヘッダーを省略した場合、レスポンスにはAccess-Control-Allow-Origin.

リクエストとレスポンスのヘッダー

于 2016-07-20T00:30:58.097 に答える