yi.han
yi.han

Reputation: 379

AspNet core Url decoding

I am using AspNetCore 2.1. I encountered an issue to deserialize a portion of URL: http://localhost:55381/api/Umbrellas/cc1892b0-b790-4698-ae3e-07bee39fd29b/ModeOperationnelWithAppliedEvents?dateDeValeur=2018-09-01T02:00:00.000+02:00

the part "2018-09-01T02:00:00.000+02:00" is expected to be deserialized as DateTimeOffset. But it failed to do it. A default(DateTimeOffset) is returned.

If I encode to this format "2018-09-01T02%3A00%3A00.000%2B02%3A00" => correctly deserialized.

When it is enclosed in URL, that does not work. In the contrarily, when the same format is enclosed in the body of message, it is correctly deserialized.

{"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":"umbrella-54576b92-0234-4ec1-8eee-142375c53325","eventVersion":0},"aggregateId":"54576b92-0234-4ec1-8eee-142375c53325"}

According to RFC3986 both colon ':' and '+' is legal char in a URL. Does anyone have an idea on this?

Upvotes: 0

Views: 243

Answers (1)

yi.han
yi.han

Reputation: 379

Ok it turns out URL and URI have different standard

the URL standard is here RFC1738: Uniform Resource Locators (URL). So according to the doc, ':' is reserved for scheme.

Many URL schemes reserve certain characters for a special meaning:
their appearance in the scheme-specific part of the URL has a
designated semantics. If the character corresponding to an octet is
reserved in a scheme, the octet must be encoded. The characters ";", "/", "?", ":", "@", "=" and "&" are the characters which may be
reserved for special meaning within a scheme. No other characters may be reserved within a scheme.

and when it goes to +:

Thus, only alphanumerics, the special characters "$-_.+!*'(),", and
reserved characters used for their reserved purposes may be used
unencoded within a URL.

Upvotes: 1

Related Questions