Я создаю небольшой API в Asp. Net Базовая версия 3.1.
Когда к нему обращаются через POST надлежащим образом, мой return Redirect(url)
в конце метода POST дает сообщение (failed) xhr
в Chrome Network Tools, и оно не работает.
У меня есть одна конечная точка, "auth", которая является [HttpPost]. Он читает в [FromBody].
[HttpPost("auth")]
public IActionResult PostAuth([FromBody] object content) {
...
(Function Body Code, takes JWT Token, builds a new JWT Token)
...
var url = "https://example.com/access/jwt?jwt=" + {my token};
return Redirect(url);
}
Кажется, все работает, сгенерированный URL с моим недавно созданным токеном JWT работает, и если я перехожу на него вручную в Chrome, он регистрируется правильно, как и должен.
Однако, когда эта конечная точка попадает через намеченный поток, перенаправление на указанный выше URL (https://example.com/access/jwt?jwt={my token}
) завершается неудачно.
Я включил CORS и почти все разрешил, пытаясь заставить его работать. В моем Startup.cs
у меня есть:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.WithOrigins(
"https://accounts.example.org",
"https://login.example.com",
"https://sso.example.example.org",
"https://example.org",
"https://example.example.com",
"https://example.com")
.AllowAnyMethod()
.AllowCredentials()
.AllowAnyHeader()
.SetPreflightMaxAge(TimeSpan.FromSeconds(5000))
.SetIsOriginAllowedToAllowWildcardSubdomains();
});
});
services.AddControllers();
}
, а также в Startup.cs
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} else
{
app.UseHsts();
}
app.UseStatusCodePages();
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseCors(
options => options.WithOrigins(
"Same Urls as Above")
.AllowAnyMethod()
.AllowCredentials()
.AllowAnyHeader()
.SetPreflightMaxAge(TimeSpan.FromSeconds(5000))
.SetIsOriginAllowedToAllowWildcardSubdomains()
);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Он размещен на Azure в службе приложений. У него также были проблемы с перенаправлением, когда я тестировал, выставляя свой локальный сервер с помощью ngrok, что в то время, как я думал, может быть, просто связано с этим, но проблема с xhr по-прежнему остается «живой» с * 1054. * -генерированный publi c url.
Я не совсем уверен, является ли это проблемой из-за того, что я делаю в своем коде, или веб-сайт, на который я перенаправляю, блокирует мой запрос на перенаправление с помощью URL параметр, приводящий к сбою.
[ОБНОВЛЕНИЕ 2020-01-16 20:52]:
Я узнал, что перенаправления не могут быть выполнены из HttpPost. Я обновил свой код до RedirectToAction
с POST на GET, который затем выполняет перенаправление:
[HttpPost("auth")]
public IActionResult PostAuth([FromBody] object content)
{
...
var serialized_ti_token = recode_to_ti_jwt(decoded_access_token);
return RedirectToAction("GetAuth", new { token = serialized_ti_token });
}
[HttpGet("auth")]
public IActionResult GetAuth(string token)
{
var url = "https://subexample.example.com/access/jwt?jwt=" + token;
return Redirect(url);
}
И все, кажется, работает хорошо, на панели Network отображается POST, затем GET для перенаправления, но та же самая проблема происходит, когда (failed) xhr
..
Я действительно думаю, что это проблема с их стороны, а не моя. Я что-то упустил?