Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何要求HTTPS而不是重定向_C#_Asp.net Core_Https_Asp.net Core Webapi - Fatal编程技术网

C# 如何要求HTTPS而不是重定向

C# 如何要求HTTPS而不是重定向,c#,asp.net-core,https,asp.net-core-webapi,C#,Asp.net Core,Https,Asp.net Core Webapi,我有一个带有API部分的ASP.net核心应用程序。我想要求对API的所有访问都使用Https 然而国家 警告 不要在接收敏感信息的Web API上使用RequireHttpAttribute 信息。RequireHttpAttribute使用HTTP状态代码重定向 从HTTP到HTTPS的浏览器。API客户端可能不理解或不遵守 从HTTP重定向到HTTPS。这些客户可以通过电子邮件发送信息 HTTP。Web API应: 不在HTTP上侦听 关闭状态代码为400(BADDREQUEST)的连接

我有一个带有API部分的ASP.net核心应用程序。我想要求对API的所有访问都使用Https

然而国家

警告

不要在接收敏感信息的Web API上使用RequireHttpAttribute 信息。RequireHttpAttribute使用HTTP状态代码重定向 从HTTP到HTTPS的浏览器。API客户端可能不理解或不遵守 从HTTP重定向到HTTPS。这些客户可以通过电子邮件发送信息 HTTP。Web API应:

  • 不在HTTP上侦听
  • 关闭状态代码为400(BADDREQUEST)的连接,不提供请求
问题


有没有办法在控制器/方法级别拒绝但不重定向传入的https

因为您使用的是asp.net core,所以让我们编写一个
ActionFilterAttribute
,如果请求方案是HTTP而不是HTTPS

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class RestrictHttpsAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.HttpContext.Request.IsHttps)
        {
            context.Result = new ForbidResult();
        }
        else
        {
            base.OnActionExecuting(context);
        }
    }
}
如何使用

以下是如何在控制器上使用操作筛选器:

[RestrictHttps]
public class ExampleController : Controller
{
    // controller code goes here.
}

为了进一步阅读,checkout

最初问了两个相关问题,为了清晰起见,我选择将第二个问题移到这里。您想在特定的控制器/操作上,还是在整个应用程序中使用它?目前,我只想寻找一个控制器或操作。当前,同一项目的其他控制器应具有重定向行为?但实际上两者都可以,我可以将API部分拆分为一个新项目。
有没有办法拒绝但不重定向传入的https
?如果(!Request.IsSecureConnection)返回BadRequest();但是你不能真正阻止客户端发送它。如果是这样,那么在你想要的控制器上写一个
属性
,或者使用一个BaseController,然后覆盖
OnActionExecuting
方法来检查请求
方案
,然后返回一个
BadRequestResult
(400)或
禁止
(403)结果谢谢。我在被禁止的和不好的要求之间进进出出。对我来说,被禁止的是你进入了正确的地方,但你不被允许进入。请求错误。这不是访问所选资源的有效方法。我计划使用flop到bad请求。谢谢你写得好。好主意,很高兴我能帮忙。干杯