我有一个使用ASP.NET Core RC2在MVC6中构建的Intranet站点.我想获取访问Intranet站点的人的Windows用户名.
因此,如果Jim访问内部网站点,我希望该站点接收"Domain\Jim",而如果Anne访问内部网站,我希望该站点接收"Domain\Anne".
我的IIS服务器上仅启用了Windows身份验证,禁用了匿名身份验证.
我的网站设置为使用Windows身份验证并禁用匿名身份验证.
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)
通过调试我可以使用System.Security.Principal.WindowsIdentity.GetCurrent().Name,但当然在IIS服务器上返回"IIS APPPOOL\SiteName".
我使用HttpContext从旧版本的ASP.NET中找到了许多示例,我尝试使用以下内容将其注入到我的控制器中,但userName最终为null.
//Startup.cs
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//HomeController.cs
public HomeController(IHttpContextAccessor _accessor)
{
string userName = _accessor.HttpContext.User.Identity.Name;
}
Run Code Online (Sandbox Code Playgroud)
将Windows用户名传递给ASP.NET Core RC2 MVC6中的Intranet站点的正确方法是什么?
我有一个ASP.NET 5 MVC 6 Web API项目.大多数API端点都具有[Authorize]属性,并且在IIS和Visual Studio中项目的属性上都启用了Windows身份验证.这一切在beta 7中运行良好.
然而,在测试版8中,这不起作用.通过一个完全干净的项目很容易重现这个:
结果:
尝试确定托管应用程序的DNX进程的进程ID时发生错误.
结果:
该项目启动,但Web API返回500.在"输出"窗口中注意:
Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker:警告:过滤器"Microsoft.AspNet.Mvc.Filters.AuthorizeFilter"上的请求授权失败.
发布到IIS时,该项目也不起作用.
正如beta 8 声明中所述,托管模型已经发生变化,IIS正在将请求传递给Kestrel." 服务器"页面未提供任何Kestrel支持Windows身份验证的指示.是否有一些技巧可以让Windows身份验证在beta 8中运行?