C#RequireHttpsAttribute

时间:2014-08-11 18:48:17

标签: c# asp.net http https attributes

我正在尝试创建自己的RequireHttps属性,因为我不想使用Mvc中的RequireHttpsAttribute。我只想拒绝非安全连接,而不是强迫他们使用SSL重新发送它们。我从Microsoft网页复制了一个函数,但由于某种原因,该属性拒绝了两个连接,http和https。

这是我的代码,任何人都知道如何修复它或以其他方式来解决方案?

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Method, Inherited = true,
    AllowMultiple = true)]
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
        {
            actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
            {
                ReasonPhrase = "HTTPS Required"
            };
        }
        else
        {
            base.OnAuthorization(actionContext);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

actionContext.Request.Method != HttpMethod.Options

条件的这一部分将拒绝任何不使用OPTIONS HTTP方法的请求。因此,条件转换为它将拒绝除通过HTTPS发出的OPTIONS请求之外的任何请求。这包括任何GETPOST

尝试不使用条件的第二部分:

if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)