aspnet拒绝ip访问_ASP.NET Core 中通过 IP 地址访问也会强制跳转 https 的问题

通过下面的 url 重写规则 RedirectToHttpsRule 实现了,ASP.NET Core 内置的 https 跳转组件的判断逻辑是只要 X-Forwarded-Proto 不是 https 就跳转,我觉得更合理的判断逻辑是只有 X-Forwarded-Proto 为 http 时才跳转,这样如果没有设置 X-Forwarded-Proto 就不会跳转。

RedirectToHttpsRule.cs

namespace Cnblogs.Web.Rewrite

{

public class RedirectToHttpsRule : IRule

{

private const string HEADER_HAME = "X-Forwarded-Proto";

public void ApplyRule(RewriteContext context)

{

var request = context.HttpContext.Request;

if (request.Headers.TryGetValue(HEADER_HAME, out var forwardedProto))

{

if (forwardedProto.ToString() == "http")

{

var isHttpGet = request.Method.Equals("get", StringComparison.OrdinalIgnoreCase);

var statusCode = isHttpGet ? StatusCodes.Status301MovedPermanently : StatusCodes.Status307TemporaryRedirect;

var host = context.HttpContext.Request.Host;

var newUrl = new StringBuilder()

.Append("https://")

.Append(host)

.Append(request.PathBase)

.Append(request.Path)

.Append(request.QueryString);

var response = context.HttpContext.Response;

response.StatusCode = statusCode;

response.Headers[HeaderNames.Location] = newUrl.ToString();

context.Result = RuleResult.EndResponse;

}

}

}

}

}

RewriteOptionsExtensions.cs

namespace Cnblogs.Web.Rewrite

{

public static class RewriteOptionsExtensions

{

public static RewriteOptions AddCnblogsRedirectToHttps(this RewriteOptions options)

{

options.Rules.Add(new RedirectToHttpsRule());

return options;

}

}

}

HttpsRedirectionBuilderExtensions.cs

namespace Microsoft.AspNetCore.Builder

{

public static class HttpsRedirectionBuilderExtensions

{

public static IApplicationBuilder UseCnblogsHttpsRedirection(this IApplicationBuilder app)

{

app.UseRewriter(new RewriteOptions().AddCnblogsRedirectToHttps());

return app;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值