Skip to content

Commit dbe09e5

Browse files
authored
Overwrite previous key if RegisterKey is called twice (#565)
Previously, this would just throw, so we'll let the last one win.
1 parent 22db32e commit dbe09e5

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

src/Microsoft.AspNetCore.SystemWebAdapters.Abstractions/SessionState/Serialization/JsonSessionSerializerOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,5 @@ public IEqualityComparer<string> KeyComparer
4242
/// </summary>
4343
/// <typeparam name="T"></typeparam>
4444
/// <param name="key"></param>
45-
public void RegisterKey<T>(string key) => KnownKeys.Add(key, typeof(T));
45+
public void RegisterKey<T>(string key) => KnownKeys[key] = typeof(T);
4646
}

test/Microsoft.AspNetCore.SystemWebAdapters.CoreServices.Tests/SessionState/Serialization/JsonSessionKeySerializerTests.cs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,37 @@ public void ChangeSessionKeysComparer()
358358
Assert.True(result2);
359359
}
360360

361+
[Fact]
362+
public void RegisterKey()
363+
{
364+
// Arrange
365+
var options = new JsonSessionSerializerOptions();
366+
367+
// Act
368+
options.RegisterKey<int>("key");
369+
370+
// Assert
371+
var item = Assert.Single(options.KnownKeys);
372+
Assert.Equal(typeof(int), item.Value);
373+
Assert.Equal("key", item.Key);
374+
}
375+
376+
[Fact]
377+
public void RegisterKeySameName()
378+
{
379+
// Arrange
380+
var options = new JsonSessionSerializerOptions();
381+
382+
// Act
383+
options.RegisterKey<int>("key");
384+
options.RegisterKey<int>("key");
385+
386+
// Assert
387+
var item = Assert.Single(options.KnownKeys);
388+
Assert.Equal(typeof(int), item.Value);
389+
Assert.Equal("key", item.Key);
390+
}
391+
361392
private sealed class Type1
362393
{
363394
}

0 commit comments

Comments
 (0)