5

これはHow does Access-Control-Allow-Origin header work?の複製になりますが、そこのメソッドも私のために働いていません。私はちょうど何かが足りないと思っています。.NETコアのUseCors()はヘッダーを追加しません

私はAJAX経由でアクセスしている.NET Core Web APIから私の応答にAccess-Control-Allow-Originヘッダーを取得しようとしています。

私はいくつかのことを試しました。特に指定のない限り、すべてがStartup.csファイルにあります。 Microsoft Documentationあたりの方法1

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add database 
    services.AddDbContext<DbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DbConnection"))); 

    // Add the ability to use the API with JSON 
    services.AddCors(); 

    // Add framework services. 
    services.AddMvc(); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    if (env.IsDevelopment()) 
    { 
     using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope()) 
     { 
      serviceScope.ServiceProvider.GetService<DbContext>().Database.Migrate(); 
      serviceScope.ServiceProvider.GetService<DbContext>().EnsureSeedData(); 
     } 
    } 

    app.UseCors(builder => builder.WithOrigins("https://localhost:44306").AllowAnyMethod()); 

    app.UseJwtBearerAuthentication(new JwtBearerOptions 
    { 
     Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
     Audience = Configuration["Authentication:AzureAd:Audience"], 
    }); 

    app.UseMvc(); 
} 

方法2

public void ConfigureServices(IServiceCollection services) 
{ 
    // ... 

    services.AddCors(options => options.AddPolicy("AllowWebApp", 
     builder => builder.AllowAnyMethod() 
          .AllowAnyMethod() 
          .AllowAnyOrigin())); 
          //.WithOrigins("https://localhost:44306"))); 

    // ... 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    // ... 

    app.UseCors("AllowWebApp"); 

    // ... 
} 

Iは、コントローラと方法の両方に[EnableCors("AllowWebApp")]を追加しようとしました。ポストマンから

、私が手:

コンテンツエンコード→gzipの
コンテンツタイプ→テキスト/平野。文字セット= UTF-8
日→水、2017年1月25日4時51分48秒GMT
サーバー→ケストレル
状態→200
は→のAccept-エンコーディングを
X-パワード・バイ→ASP.NET
を変えますx-sourcefiles→=?UTF-8?B?[更新済み]

私もChromeで試してみましたが、同様のヘッダーを取得しました。

私がアクセスしようとしている方法は、Authorizeという属性があります。しかし、その部分は正常に動作しているはずです(少なくとも私は良い応答を得ています)

私は何か非常に明白なものを紛失していますか?私は現在、バージョン1.1.0を実行しています。ベアラ認証を使用して(または任意の私は想像)するときJSとコントローラースタブを追加


編集

function getContactPreviews(resultsCallback) { 
    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.onreadystatechange =() => { 
     if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) { 
      resultsCallback(JSON.parse(xmlhttp.response)); 
     } 
    } 

    xmlhttp.open("GET", "https://localhost:44357/api/User/ContactsPreview", true); 
    xmlhttp.setRequestHeader("Authorization", "Bearer " + localStorage.getItem("AuthorizationToken")); 
    xmlhttp.send(); 
} 

コントローラースタブは

[Authorize] 
[Route("api/[controller]")] 
public class UserController : ApiController 
{ 
    [HttpGet(nameof(ContactsPreview))] 
    [EnableCors("AllowWebApp")] 
    public IEnumerable<Customer> ContactsPreview() 
    { 
     // ... 
    } 
} 
+0

あなたはどのように郵便配達員と一緒にサーバーに向かいますか?ヘッダーはOPTIONS要求の場合にのみ返されます – Rob

+0

@Rob。それが私が欠けていたものです。あまりにも郵便局側(私はそれもChromeでそれを試していた、それは正しい方法を使用していた)と、より多くのコントローラ側です。私は '[HttpOptions]の代わりに' [HttpGet] 'を持っていました。私はそれがそれのような何かばかげていると感じていた。 – David

+0

@Robしかし、Chromeはまだ失敗しています。 204エラーが発生しています。郵便配達は完璧に機能する。両方とも同じベアラートークンを使用しています。 Chromeではキャッシュが無効になっています。 – David

答えて

関連する問題