diff --git a/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs b/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs
index 0525f0cd6c..dd114e9e8b 100644
--- a/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs
+++ b/src/Microsoft.AspNet.PipelineCore/DefaultHttpContext.cs
@@ -54,7 +54,16 @@ namespace Microsoft.AspNet.PipelineCore
public override ClaimsPrincipal User
{
- get { return HttpAuthentication.User; }
+ get
+ {
+ var user = HttpAuthentication.User;
+ if (user == null)
+ {
+ user = new ClaimsPrincipal(new ClaimsIdentity());
+ HttpAuthentication.User = user;
+ }
+ return user;
+ }
set { HttpAuthentication.User = value; }
}
diff --git a/test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs b/test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs
new file mode 100644
index 0000000000..4eb0b87d9e
--- /dev/null
+++ b/test/Microsoft.AspNet.PipelineCore.Tests/DefaultHttpContextTests.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Security.Claims;
+using System.Linq;
+using Microsoft.AspNet.Abstractions;
+using Microsoft.AspNet.FeatureModel;
+using Microsoft.AspNet.HttpFeature;
+using Xunit;
+
+namespace Microsoft.AspNet.PipelineCore.Tests
+{
+ public class DefaultHttpContextTests
+ {
+ [Fact]
+ public void EmptyUserIsNeverNull()
+ {
+ var context = new DefaultHttpContext(new FeatureCollection());
+ Assert.NotNull(context.User);
+ Assert.Equal(1, context.User.Identities.Count());
+ Assert.True(object.ReferenceEquals(context.User, context.User));
+ Assert.False(context.User.Identity.IsAuthenticated);
+ Assert.True(string.IsNullOrEmpty(context.User.Identity.AuthenticationType));
+
+ context.User = null;
+ Assert.NotNull(context.User);
+ Assert.Equal(1, context.User.Identities.Count());
+ Assert.True(object.ReferenceEquals(context.User, context.User));
+ Assert.False(context.User.Identity.IsAuthenticated);
+ Assert.True(string.IsNullOrEmpty(context.User.Identity.AuthenticationType));
+
+ context.User = new ClaimsPrincipal();
+ Assert.NotNull(context.User);
+ Assert.Equal(0, context.User.Identities.Count());
+ Assert.True(object.ReferenceEquals(context.User, context.User));
+ Assert.Null(context.User.Identity);
+
+ context.User = new ClaimsPrincipal(new ClaimsIdentity("SomeAuthType"));
+ Assert.Equal("SomeAuthType", context.User.Identity.AuthenticationType);
+ Assert.True(context.User.Identity.IsAuthenticated);
+ }
+ }
+}
\ No newline at end of file
diff --git a/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj b/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj
index efb347f4aa..2f35d88951 100644
--- a/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj
+++ b/test/Microsoft.AspNet.PipelineCore.Tests/Microsoft.AspNet.PipelineCore.Tests.kproj
@@ -24,6 +24,7 @@
+