From 20aaa45671ff64b9e1cc3e88b202776374840ea1 Mon Sep 17 00:00:00 2001 From: SchlenkR Date: Wed, 7 Aug 2024 17:43:16 +0200 Subject: [PATCH] fixed untracked bug: using config_useBaseUrl as a http template won't crash when printing unfinished requests --- Directory.Build.props | 3 +++ docs/Composability.fsx | 2 +- fiddle/issue-178.fsx | 31 +++++++++++++++++++++++++++++++ src/FsHttp/Dsl.fs | 2 +- src/Tests/Config.fs | 2 +- 5 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 fiddle/issue-178.fsx diff --git a/Directory.Build.props b/Directory.Build.props index 38e30cf2..c8ccc871 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -16,6 +16,9 @@ https://www.nuget.org/packages/FsHttp#release-body-tab + 14.5.1 + - Fixed untracked bug: using config_useBaseUrl as http template won't crash when printing unfinished requests + 14.5.0 - Added 'useBaseUrl' and 'transformUrl' to Config for better composability - Fixed some extension methods diff --git a/docs/Composability.fsx b/docs/Composability.fsx index 59bfa4a4..4af7ea09 100644 --- a/docs/Composability.fsx +++ b/docs/Composability.fsx @@ -38,7 +38,7 @@ let httpForMySpecialEnvironment = // we have to change the URL for any method using a header transformer, // like so: config_transformHeader (fun (header: Header) -> - let address = baseUrl header.target.address.Value + let address = baseUrl (header.target.address |> Option.defaultValue "") { header with target.address = Some address }) // other header values can be just configured as usual: diff --git a/fiddle/issue-178.fsx b/fiddle/issue-178.fsx new file mode 100644 index 00000000..045d29fc --- /dev/null +++ b/fiddle/issue-178.fsx @@ -0,0 +1,31 @@ + +#r "../src/FsHttp/bin/debug/net6.0/FsHttp.dll" + +open System.IO +open System.Net.Http +open System.Net.Http.Headers +open FsHttp +open FsHttp.Operators + + +let httpd0 = + http { + config_transformHeader (fun (header: Header) -> + printfn "header.target: %A" header.target + printfn "header.target.address: %A" header.target.address + + let address = "http://aaaa:5000" (header.target.address |> Option.defaultValue "") + { header with target.address = Some address }) + } + + + +let httpd1 = + http { + config_transformUrl (fun url -> "http://aaaa:5000" url) + } + +let httpd2 = + http { + config_useBaseUrl "http://aaaa:5000" + } diff --git a/src/FsHttp/Dsl.fs b/src/FsHttp/Dsl.fs index 6bc7b766..39ad9dcb 100644 --- a/src/FsHttp/Dsl.fs +++ b/src/FsHttp/Dsl.fs @@ -482,7 +482,7 @@ module Config = let transformUrl transformer (context: IUpdateConfig<_>) = context |> transformHeader (fun header -> - let address = transformer header.target.address.Value + let address = transformer (header.target.address |> Option.defaultValue "") { header with target.address = Some address }) let useBaseUrl (baseUrl: string) (context: IUpdateConfig<_>) = diff --git a/src/Tests/Config.fs b/src/Tests/Config.fs index 3d2a62ef..2cf01934 100644 --- a/src/Tests/Config.fs +++ b/src/Tests/Config.fs @@ -178,7 +178,7 @@ let [] ``Header Transformer``() = let httpSpecial = let transformWith suffix = fun (header: Header) -> - let address = header.target.address.Value + let address = (header.target.address |> Option.defaultValue "") { header with target.address = Some $"{address}{suffix}" } http { config_transformHeader (transformWith urlSuffix1)