AngularJSページからASP.NET Web-API Webサービスに接続しようとすると、次のようになります
資格情報フラグは「true」ですが、「Access-Control-Allow-Credentials」ヘッダーは ''です。資格情報を許可するには、「true」である必要があります。したがって、オリジン ' http:// localhost:221 'はアクセスを許可されません。
var cors = new EnableCorsAttribute("http://localhost:221", "*","GET,PUT,POST,DELETE");
config.EnableCors(cors);
このAngularJSを使用する
$http({
method: 'GET',
url: 'http://localhost:1980/api/investors/62632',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
withCredentials: true
// withCredentials: true,
}).then(function onUserComplete(response) {
// this callback will be called asynchronously
// when the response is available
}, function onError(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
多くの記事を読んだ後、これをweb.configに追加します
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:221" />
</customHeaders>
</httpProtocol>
そして私はこのエラーメッセージを受け取ります
「Access-Control-Allow-Origin」ヘッダーには複数の値localhost:221、localhost:221が含まれていますが、許可されているのは1つだけです。したがって、元のlocalhost:221はアクセスを許可されません。
これは一度追加したので意味がありませんが、見つかりませんが、web.configに追加すると、複数回追加されたというエラーが表示されます。私は多くの記事を読みましたが、正しい答えを見つけることができないようです。 Google Chromeを使用しています。今髪を抜いているので助かります。
誰のために、誰がWebApiConfig.csを使用するか:
config.EnableCors(new EnableCorsAttribute("*", "*", "*") { SupportsCredentials = true });
Angular2アプリから.netコアのwebapiをヒットしようとしているときにこの質問に出くわしました。次のように、Startup.csのConfigureメソッドのcors構成にAllowCredentials()を追加する必要がありました。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.UseCors(builder =>
builder
.AllowCredentials()
.WithOrigins("http://localhost:3000"));
...
}
プリフライトリクエストについては、次の方法を試してください。
CORSのデバッグを簡単にするには、Chrome拡張PostmanまたはFiddlerを使用します。ヘッダーを2回追加することになりますが、コード全体がないとデバッグが困難です( CORSは、コードを使用してもデバッグが困難です)。
私には、web.config設定とグローバルEnableCors()
属性の両方を設定するべきではないようです。これにより、doubleが発生します。
サーバー側にAccess-Control-Allow-Credentials
を追加しているようには見えませんが、AllowCors属性によって追加されている可能性があります。 (私はOWINでCORSを自分で処理することに部分的です)