出于原因,我需要解析某些外观格式为查询字符串(即 key=value&another_key=another_value
),但是在URL的片段中,例如:
http://example.com/callback#id_token=my_long_jwt&State=some_state
如果#
是?
,那么使用<?>
很容易,但是我无法弄清楚在片段中时如何使用Url.Parser.Query
。
我可以将片段作为 String
:
import Url.Parser as Parser
import Url.Parser exposing ((</>))
type Route = Callback String | NotFound
route : Parser.Parser (Route -> a) a
route = Parser.map Callback (Parser.s "callback" </> fragmentWithDefault )
fragmentWithDefault : Parser.Parser (String -> a) a
fragmentWithDefault = Parser.fragment <| Maybe.withDefault "no_fragment"
toRoute : Url.Url -> Route
toRoute url = Maybe.withDefault NotFound (Url.Parser.parse route url)
但是Url.Parser.Query
中没有API,它运行了Url.Parser.Query.Parser
,我可以在Callback
中运行String
。
URL解析器仅将URL片段视为String
,但您可以在解析之前用?
替换#
:
Maybe.withDefault url <| Url.fromString <| String.replace '#' '?' <| Url.toString url
然后,您将在查询部分中获得片段,以便您正常解析。