Asp.net mvc 3 如何在使用Windows身份验证时强制MVC应用程序填充User.Identity.Name值

Asp.net mvc 3 如何在使用Windows身份验证时强制MVC应用程序填充User.Identity.Name值,asp.net-mvc-3,windows-authentication,Asp.net Mvc 3,Windows Authentication,我有一个MVC3应用程序,用于匿名用户和经过身份验证的用户 通过配置IIS身份验证模式以启用匿名身份验证和windows身份验证,然后将身份验证模式web.config设置设置为“windows”,并有选择地将自定义授权属性应用于需要身份验证检查的操作,可以实现此目的 问题是,在某些操作中,我不需要应用该属性(这样匿名用户也可以访问该属性),但如果管理员用户正在浏览该属性,则我希望检索他的user.Identity.Name值 应用程序的行为不可预测,在某些情况下,一旦用户在以前的操作中通过身份

我有一个MVC3应用程序,用于匿名用户和经过身份验证的用户

通过配置IIS身份验证模式以启用匿名身份验证和windows身份验证,然后将身份验证模式web.config设置设置为“windows”,并有选择地将自定义授权属性应用于需要身份验证检查的操作,可以实现此目的

问题是,在某些操作中,我不需要应用该属性(这样匿名用户也可以访问该属性),但如果管理员用户正在浏览该属性,则我希望检索他的user.Identity.Name值

应用程序的行为不可预测,在某些情况下,一旦用户在以前的操作中通过身份验证,user.Identity.Name属性将在用户会话的其余部分保持可用。然而,在其他情况下,它是一个空字符串

那么,我实际上如何告诉应用程序“去验证这个用户”?如果Authorize属性可以强制用户进行身份验证,那么如何在操作中按需实现相同的效果

谢谢你的帮助

M

如果Authorize属性可以强制用户进行身份验证, 那么,我怎样才能在一次行动中达到同样的效果

通过执行与
authorized属性
相同的操作:

return new HttpUnauthorizedResult();

谢谢你,达林。但是,我并不打算拒绝未经身份验证的用户,而是希望将他们的名字填入user.Identity.name,如果他们实际上可以进行身份验证,如果你知道我的意思的话。类似于,如果username.startsWith(“admin”),那么User.Identity.Authenticate()。。。我只是想不出真正的命令或技术是什么。换句话说,authorized属性的哪一行实际执行用户的身份验证?这是由相应的身份验证处理程序完成的,并且在执行上下文中比控制器操作发生得更早。这个属性中没有任何东西能做到这一点。例如,如果您正在使用FormsAuthentication,则在执行管道中的FormsAuthentication模块中会发生这种情况。此模块读取表单身份验证cookie,对其进行解密,提取用户名并设置当前主体。因此,无法要求应用程序按需“转到并验证此用户”?当然可以。根据您使用的身份验证方案,您可以从请求中手动填充
User
属性。