Require SSL in WebApi?

后端 未结 6 1863
夕颜
夕颜 2020-12-07 15:31

Is there a way to require SSL for WebApi? An attribute?

I don\'t see an applicable attribute under System.Web.Http, something like the RequireHttp

6条回答
  •  眼角桃花
    2020-12-07 16:04

    you can use the following filter class to force your action method to use SSL, this will handle your request wither its a GET method or any other verb, if its a get method it will redirect the browser (using the location header) to the new URI. Otherwise a message will be shown to use https

    Below code shows that you have to override OnAuthorization method after inheriting from AuthorizationFilterAttribute.

            string _HtmlBody = string.Empty;
            UriBuilder httpsNewUri;
    
            var _Request = actionContext.Request;
    
            if (_Request.RequestUri.Scheme != Uri.UriSchemeHttps )
            {
    
                _HtmlBody = "

    Https is required

    "; if (_Request.Method.Method == "GET"){ actionContext.Response = _Request.CreateResponse(HttpStatusCode.Found); actionContext.Response.Content = new StringContent(_HtmlBody, Encoding.UTF8, "text/html"); httpsNewUri = new UriBuilder(_Request.RequestUri); httpsNewUri.Scheme = Uri.UriSchemeHttps; httpsNewUri.Port = 443; //To ask a web browser to load a different web page with the same URI but different scheme and port actionContext.Response.Headers.Location = httpsNewUri.Uri; }else{ actionContext.Response = _Request.CreateResponse(HttpStatusCode.NotFound); actionContext.Response.Content = new StringContent(_HtmlBody, Encoding.UTF8, "text/html"); } }

提交回复
热议问题