AspNet核心Url解码

问题描述 投票:0回答:1

我使用的是AspNetCore 2.1。我遇到了一个问题,要反序列化一部分网址:http://localhost:55381/api/Umbrellas/cc1892b0-b790-4698-ae3e-07bee39fd29b/ModeOperationnelWithAppliedEvents?dateDeValeur=2018-09-01T02:00:00.000+02:00

“2018-09-01T02:00:00.000 + 02:00”部分预计将被反序列化为DateTimeOffset。但它未能做到这一点。返回默认值(DateTimeOffset)。

如果我编码为此格式“2018-09-01T02%3A00%3A00.000%2B02%3A00”=>正确反序列化。

当它包含在URL中时,这不起作用。相反,当在消息正文中包含相同的格式时,它被正确地反序列化。

{ “lastKnownAggregateVersion”:4 “validFrom”: “2017-09-03T00:00:00.000 + 02:00”, “commandId”: “0cfa7da0-7895-4917-89ac-24ffa3abb87c”, “newDateDeValeur”:“2017- 09-03T00:00:00.000 + 02:00" , “eventUniqueIdentifier”:{ “streamName中”: “伞形54576b92-0234-4ec1-8eee-142375c53325”, “eventVersion”:0}, “aggregateId”:“54576b92- 0234-4ec1-8eee-142375c53325" }

根据RFC3986,冒号':'和'+'都是URL中的合法字符。有没有人对此有所了解?

asp.net-core urldecode
1个回答
1
投票

好吧,事实证明URL和URI有不同的标准

URL标准在这里RFC1738: Uniform Resource Locators (URL)。所以根据文档,“:”是为计划保留的。

许多URL方案保留某些特殊含义的字符: 它们在URL的特定于方案的部分中的出现有一个 指定的语义。如果对应于八位字节的字符是 在方案中保留,八位字节必须被编码。字符“;”,“/”,“?”,“:”,“@”,“=”和“&”是可能的字符 保留给计划中的特殊含义。在方案中不能保留其他字符。

当它转到+时:

因此,只有字母数字,特殊字符“$ -_。+!*'(),”和 可以使用用于其保留目的的保留字符 在URL中未编码。

© www.soinside.com 2019 - 2024. All rights reserved.