最新のベータ2リリースでは、クロスドメインPOST Apiコントローラーをヒットするリクエストを取得するのに多くの問題があります。
Chrome(および他のブラウザー)が吐き出します:
OPTIONS http://api.hybridwebapp.com/api/values 400 (Bad Request)
POST http://api.hybridwebapp.com/api/values 404 (Not Found)
この問題 に関連している可能性がありますが、その回避策とweb.configなどの他の修正を適用しました additions here
私はしばらくの間これで頭を叩いてきたので、問題を正確に再現するソリューションを作成しました。
Webアプリを読み込むと、POSTのGETボタンが1つあり、ボタンの横に応答が表示されます。GETは機能します。POST正常に戻ります。
私はFiddlerから原因のヒントを得ることができますが、応答を見るとAccess-Controll-Allow-Originヘッダーにドメインが含まれているため、意味がありません:
ソリューションには、「ConfigurationScreenshots」と呼ばれるフォルダーがあり、IIS構成(Webサイトバインディング)およびプロジェクトプロパティの構成のスクリーンショットがいくつかあります。
編集:ホストファイル(%SystemRoot%\ system32\drivers\etc)にこのエントリを追加することを忘れないでください:
127.0.0.1 hybridwebapp.com api.hybridwebapp.com
**ステータス:** Chromeなどの一部のブラウザでは、OPTIONS応答のエラーメッセージに関係なく、POST Firefoxのようなことはありません)。しかし、私はそれが解決したとは思わない。
所有しているOPTIONSリクエストのFidlerスクリーンショットをご覧ください
Access-Control-Allow-Origin: http://hybridwebapp.com
そしてまだエラー:
Origin http://hybridwebapp.com は許可されていません
それは完全に矛盾しています。まるでヘッダーを無視しているようです。
OKこれは私が今まで遭遇した中で最も奇妙な問題にならなければなりません。これを「解決」する方法は次のとおりです。
これを削除します:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
<add name="Access-Control-Allow-Origin" value="http://mydomain.com" />
<add name="Access-Control-Allow-Headers" value="Accept, Content-Type, Origin" />
<add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
あなたはすでにこれを持っているから:
var enableCorsAttribute = new EnableCorsAttribute("http://mydomain.com",
"Origin, Content-Type, Accept",
"GET, PUT, POST, DELETE, OPTIONS");
config.EnableCors(enableCorsAttribute);
道徳:あなただけが必要です。
OAuth Authorization。requestをWeb APIに直接送信しない場合。そのエンドポイントに対してOWIN CORSサポートを有効にする必要があります。
自分のサイトでの操作:owin corsをインストールします
Install-Package Microsoft.Owin.Cors
注:使用しないでください:Install-Package Microsoft.AspNet.WebApi.Cors
ファイルStartup.Auth.cs内
//add this line
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
// Enable the application to use bearer tokens to authenticate users
app.UseOAuthBearerTokens(OAuthOptions);
私はMVCコントローラー(ApiControllerではない)を持っていますが、私が思いついた解決策は他の人を助けるかもしれません。 POSTアクション(/data/xlsx
)コントローラーに2つのアクションを実装しました。
HttpOptionsアクションがない場合、プリフライトチェックで404を取得します。
コード:
[HttpOptions]
public ActionResult Xlsx()
{
// Catches and authorises pre-flight requests for /data/xlsx from remote domains
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
Response.AddHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS");
return null;
}
[HttpPost]
public ActionResult Xlsx(string data, string name)
{
Xlsx(); // Add CORS headers
/* ... implementation here ... */
}
IE 11、Chrome、FireFox。
ConfigureOAuth内のstartup.csファイルにこれを追加
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
Responseヘッダーに以下のコードを追加してください。
Response.AddHeader("Access-Control-Allow-Origin", "*");