Encode cookies when setting RequestCookiesFeature.Cookie collection
- Dominant language
- C#
- Stars
- 38.4k
- Forks
- 10.9k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 281
Description
### Describe the bug
Considering [IRequestCookiesFeature](https://github.com/dotnet/aspnetcore/blob/master/src/Http/Http.Features/src/IRequestCookiesFeature.cs#L14) signature I suppose it should be allowed to set cookie collection, however when I'd tried to assign `IRequestCookieCollection` to `RequestCookiesFeature.Cookie` exception was fired.
In the property getter values (and sometimes) keys of cookies is being decoded with [RequestCookieCollection.Parse](https://github.com/dotnet/aspnetcore/blob/master/src/Http/Http/src/Features/RequestCookiesFeature.cs#L78), but in the setter values added to cookie header [as is](https://github.com/dotnet/aspnetcore/blob/master/src/Http/Http/src/Features/RequestCookiesFeature.cs#L98) (also name of variable `_parsedValues` suggests that data isn't encoded).
I attempted to encode cookies values in my `IRequestCookieCollection` implementation. Predictably, unfortunate side effect was that cookies in context became encoded.
### To Reproduce
- Make sure to have cookie with special symbols (used cookie with value `{"}`)
- Run:
```csharp
HttpContext.Request.Cookies = HttpContext.Request.Cookies;
```
### Exceptions
```
System.ArgumentException: Invalid cookie value: {"} (Parameter 'value')
at Microsoft.Net.Http.Headers.CookieHeaderValue.CheckValueFormat(StringSegment value, String parameterName)
at Microsoft.Net.Http.Headers.CookieHeaderValue..ctor(StringSegment name, StringSegment value)
at Microsoft.AspNetCore.Http.Features.RequestCookiesFeature.set_Cookies(IRequestCookieCollection value)
at Microsoft.AspNetCore.Http.DefaultHttpRequest.set_Cookies(IRequestCookieCollection value)
at WidgetSite.Filters.CookielessAntiforgeryFilter.InternalCookielessAntiforgeryFilter.OnAuthorizationAsync(AuthorizationFilterContext context) in C:\Projects\MTS.Money.Git\MTS.Money\WidgetSite\Helpers\CookielessAntiforgeryFilter.cs:line 35
```
### Further technical details
- ASP.NET Core version 3.1.10
- `dotnet --info` output:
```
.NET SDK (reflecting any global.json):
Version: 5.0.101
Commit: d05174dc5a
Runtime Environment:
OS Name: Windows
OS Version: 10.0.19042
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\5.0.101\
Host (useful for support):
Version: 5.0.1
Commit: b02e13abab
.NET SDKs installed:
3.1.200 [C:\Program Files\dotnet\sdk]
3.1.401 [C:\Program Files\dotnet\sdk]
5.0.100 [C:\Program Files\dotnet\sdk]
5.0.101 [C:\Program Files\dotnet\sdk]
.NET runtimes installed:
Microsoft.AspNetCore.All 2.1.23 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.23 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.23 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.1 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
To install additional .NET runtimes or SDKs:
https://aka.ms/dotnet-download
```
- IDE: VS 2019 v16.8.3
Contributor guide
Assessment
This issue has not been assessed yet.