F# 如何使用suave将http重定向到https,在f中#

F# 如何使用suave将http重定向到https,在f中#,f#,suave,F#,Suave,如何使用Suave将连接从http重定向到https 当时我发现: let redirectToSsl : WebPart = context(fun c -> match c.request.header "x-forwarded-proto" with | Choice1Of2 "http" -> let uriBuilder = new UriBuilder(

如何使用Suave将连接从http重定向到https

当时我发现:

let redirectToSsl : WebPart =
      context(fun c ->
       match c.request.header "x-forwarded-proto" with
        | Choice1Of2 "http" ->
              let uriBuilder = new UriBuilder(
                                      Scheme = Uri.UriSchemeHttps,
                                      Path = c.request.path,
                                      Host = c.request.host)
              Redirection.redirect (uriBuilder.Uri.ToString())
        | _ -> fun _ ->async { return None })

但我真的不确定这在管道中的位置?

我想改变两件事:

  • 检查实际的协议。我认为
    x-forwarded-proto
    仅用于代理,但我不确定
  • 要使其适合您的管道,请在访问安全时接受要调用的Web部件
结果如下所示:

let redirectToSsl allow : WebPart =
    context (fun c ->
        if c.request.binding.scheme.secure then
            allow
        else
            let uriBuilder =
                new UriBuilder(
                    Scheme = Uri.UriSchemeHttps,
                    Path = c.request.path,
                    Host = c.request.host)
            Redirection.redirect (uriBuilder.Uri.ToString()))
let app = redirectToSsl Files.browseHome   // allow browsing under SSL only
用法如下所示:

let redirectToSsl allow : WebPart =
    context (fun c ->
        if c.request.binding.scheme.secure then
            allow
        else
            let uriBuilder =
                new UriBuilder(
                    Scheme = Uri.UriSchemeHttps,
                    Path = c.request.path,
                    Host = c.request.host)
            Redirection.redirect (uriBuilder.Uri.ToString()))
let app = redirectToSsl Files.browseHome   // allow browsing under SSL only
警告:我还没有在实践中尝试过这一点,所以我可能忽略了其他问题