これは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()
{
// ...
}
}
あなたはどのように郵便配達員と一緒にサーバーに向かいますか?ヘッダーはOPTIONS要求の場合にのみ返されます – Rob
@Rob。それが私が欠けていたものです。あまりにも郵便局側(私はそれもChromeでそれを試していた、それは正しい方法を使用していた)と、より多くのコントローラ側です。私は '[HttpOptions]の代わりに' [HttpGet] 'を持っていました。私はそれがそれのような何かばかげていると感じていた。 – David
@Robしかし、Chromeはまだ失敗しています。 204エラーが発生しています。郵便配達は完璧に機能する。両方とも同じベアラートークンを使用しています。 Chromeではキャッシュが無効になっています。 – David