C# 为什么ASP.NET Identity返回401而不是重定向到登录页面?

C# 为什么ASP.NET Identity返回401而不是重定向到登录页面?,c#,asp.net,asp.net-mvc,asp.net-mvc-5,asp.net-identity-2,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Asp.net Identity 2,我试图先用代码将ASP NET标识添加到现有的mvc5项目中。 我研究了生成VS的新项目,并阅读了许多关于ASP.NET标识的文章。 在大多数情况下,我将代码从模板复制到我的项目中。我只是在IdentityDbContext上替换了DBContext,并做了一些更改。表是通过EF迁移生成的,并通过UserManager和RoleManager通过Seed方法填充,所以,我认为,部分代码工作正常 但是,当我将[Authorize]添加到控制器(不是WebApi,只是控制器)并试图从控制器获取页面时

我试图先用代码将ASP NET标识添加到现有的mvc5项目中。 我研究了生成VS的新项目,并阅读了许多关于ASP.NET标识的文章。 在大多数情况下,我将代码从模板复制到我的项目中。我只是在IdentityDbContext上替换了DBContext,并做了一些更改。表是通过EF迁移生成的,并通过UserManager和RoleManager通过Seed方法填充,所以,我认为,部分代码工作正常

但是,当我将[Authorize]添加到控制器(不是WebApi,只是控制器)并试图从控制器获取页面时,我遇到了一个问题-服务器返回401.0错误,尽管选项设置为
LoginPath=new PathString(“/Account/Login”)

这是我的代码Startup.Auth.cs

namespace App
{
    public partial class Startup
    {
        public void ConfigureAuth(IAppBuilder app)
        {
            app.CreatePerOwinContext(CwDb.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity =
                        SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User>(
                            validateInterval: TimeSpan.FromMinutes(30),
                            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });
        }
    }
}
我只需要简单的身份验证与登录/通行证和cookies,我不需要通过社会网络等身份验证


我错在哪里?在vs生成的模板中如何获得重定向?

我找到了一个解决方案。我刚刚向项目中添加了
Microsoft.Owin.Host.SystemWeb
,它成功了。不幸的是,我所看到的文章中没有任何关于此库必要性的信息。

帐户控制器中是否有登录操作?是的,但我尝试在VS生成的项目中将LoginPath重命名为不存在的路径,并重定向到该路径,尽管它返回404,但它应该位于App_Start文件夹中的Startup.Auth.cs中,而不是项目根目录中的Startup.cs。我只是在这里猜测,即使是同一个启动类(但不同的部分),编译器和运行时可能会以不同的方式看待它们。。。如果您没有这样放置它们,那么值得一试。如果它们来自不同的类,项目将不会编译,因为方法ConfigureAuth(app)不在Startup.cs类中;我在主题中添加了startup.cs列表登录操作是否具有[Authorize]属性?那里不应该有,应该允许匿名。
[assembly: OwinStartupAttribute(typeof(CarWashApplication.Startup))]
namespace App
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {

            ConfigureAuth(app);
        }
    }
}