AspNetCore v3.1 Response.Redirect от HttpPost завершается ошибкой - PullRequest
0 голосов
/ 17 января 2020

Я создаю небольшой 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}) завершается неудачно.

enter image description here

enter image description here

Я включил 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 ..

Я действительно думаю, что это проблема с их стороны, а не моя. Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...