我遵循了这篇文章https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
我完全按照文章建议设置的地方
// Requires using Microsoft.AspNetCore.Mvc;
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
和
// 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请求更改为使用HTTP而不是HTTPS,我会得到200(OK)响应。所以,我认为上面的文章存在某种问题,但我对解决方案没有太大帮助。
任何人对此问题有任何经验或见解吗?
答案 0 :(得分:3)
我从未使用过ASP.NET Core重写器,但在查看其代码时,它使用标准的class ImageGalleryBlock(blocks.StructBlock):
images = ListBlock(ImageChooserBlock(label='Image'))
def js_initializer(self):
parent_initializer = super(ImageGalleryBlock, self).js_initializer()
return "ImageGallery(%s)" % parent_initializer
@property
def media(self):
# need to pull in StructBlock's own js code as well as our own
return super(ImageGalleryBlock, self).media + forms.Media(
js=['app/js/admin/image-gallery.js']
)
方法 - https://github.com/aspnet/BasicMiddleware/blob/9814f3bfbcf3a11dc86c4047fbfc2fe48744f96c/src/Microsoft.AspNetCore.Rewrite/Internal/RedirectToHttpsRule.cs#L33
此Redirect()方法只能返回HTTP 301或302代码。
浏览器很可能会遵循此重定向,但它可能决定使用GET或POST而不使用任何数据。
我建议在浏览器开发工具中启用Response.Redirect()
并检查实际发生的情况。这篇文章很好地描述了它 - https://scotthelme.co.uk/report-uri-journey-to-a-permanent-redirect/
长话短说,您需要HTTP 307或308. preserve log
有一个可选的状态代码参数,在代码中的任何地方都不使用(看起来像ASP.NET Core上的错误)
您可能必须编写自己的代码来重定向HTTP请求。
我在一个项目中遇到了同样的问题,为了简单起见,我决定为非GET HTTP请求返回HTTP 403 Forbidden
修改强>
我查看了AddRedirectToHttps
的错误分支。实际上它似乎能够返回不同的状态代码,然后只返回301和302,因此您应该能够轻松地将状态代码配置为参数。