2017-12-07 12 views
1

내가 정확히 기사로 내가 설정이황조롱이 HTTPS POST 결과 생산 (ASP.NET 코어 2.X)

// Requires using Microsoft.AspNetCore.Mvc; 
public void ConfigureServices(IServiceCollection services) 
{ 
    services.Configure<MvcOptions>(options => 
    { 
     options.Filters.Add(new RequireHttpsAttribute()); 
    }); 

을 제안이 문서 https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl

을 따라 할 때 및

// Requires using Microsoft.AspNetCore.Rewrite; 
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    var options = new RewriteOptions() 
     .AddRedirectToHttps(); 

    app.UseRewriter(options); 

이것은 모든 브라우저에서 GET 요청을 보낼 때 잘 작동하는 것 같습니다. 그러나 POST 요청에 도달하면 그 원인을 알려주지 않고 400 상태 코드를 얻습니다. 이상하게도 DEBUG 모드에서는이 문제가 발생하지 않습니다.

Edge 또는 IE를 사용하는 경우이 오류가 발생하지 않습니다. Chrome 또는 POSTMAN을 사용하면 400 개의 상태 코드가 표시됩니다.

이상하게도 POSTMAN을 사용하고 POST 요청이 HTTPS 대신 HTTP를 사용하도록 변경하면 HTTPS 대신 200 (OK) 응답이 표시됩니다. 그래서, 위의 기사에 문제가 있다고 생각하고 있지만 해결책은별로 없습니다.

누구나이 문제에 대한 경험이나 통찰력이 있습니까?

답변

2

나는 ASP.NET 코어 라이터와 함께 일한 적이 있지만 코드로보고, 그것은 표준 Response.Redirect() 방법 사용 - https://github.com/aspnet/BasicMiddleware/blob/9814f3bfbcf3a11dc86c4047fbfc2fe48744f96c/src/Microsoft.AspNetCore.Rewrite/Internal/RedirectToHttpsRule.cs#L33

이 리디렉션() 메소드는 HTTP 301 또는 만 302 개 코드를 반환 할 수 있습니다. 브라우저는 대부분이 리디렉션을 따르지만 데이터없이 GET 또는 POST를 사용하기로 결정할 수 있습니다. 브라우저의 dev 도구에서 preserve log을 사용 설정하고 실제로 발생하는 사항을 확인하는 것이 좋습니다. 이 게시물이 아주 잘 설명 - https://scotthelme.co.uk/report-uri-journey-to-a-permanent-redirect/, 당신이 HTTP 307 또는 308 AddRedirectToHttps 코드에서 임의의 장소에서 사용하지 않는 옵션 상태 코드 인수를 가지고

길고도 짧은 이야기해야 할

(ASP.NET 코어에 벌레처럼 보이는)

HTTP 요청을 리디렉션하기 위해 사용자 자신의 코드를 작성해야 할 것입니다.

나는 하나 개 내 프로젝트에 같은 문제가 있었하고 간단하게하기 위해 나는 비 GET HTTP에 대한 금지 HTTP 403을 반환하기로 결정

편집 요청합니다

내가 AddRedirectToHttps의 잘못된 지점에 모습을. 실제로 그것은 다른 상태 코드를 반환 할 수있는 것 같습니다. 301과 302 만 있으면 상태 코드를 쉽게 인수로 구성 할 수 있습니다.