相关疑难解决方法(0)

如何使用ASP.NET Core RC2 MVC6和IIS7获取当前Windows用户

我有一个使用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站点的正确方法是什么?

c# iis-7 asp.net-core-mvc asp.net-core .net-core-rc2

10
推荐指数
2
解决办法
2万
查看次数

ASP.NET 5 beta 8中的Windows身份验证支持

我有一个ASP.NET 5 MVC 6 Web API项目.大多数API端点都具有[Authorize]属性,并且在IIS和Visual Studio中项目的属性上都启用了Windows身份验证.这一切在beta 7中运行良好.

然而,在测试版8中,这不起作用.通过一个完全干净的项目很容易重现这个:

  1. 使用ASP.NET 5 Web API模板创建新项目.
  2. 获取项目的属性(而不是解决方案),转到"调试"选项卡,启用Windows身份验证并禁用"匿名".保存更改.
  3. 按F5并让它尝试运行该项目.

结果:

尝试确定托管应用程序的DNX进程的进程ID时发生错误.

  1. 现在返回项目属性并启用Anonymous.也启用Windows.保存更改.
  2. 转到您的控制器并添加[授权]属性.
  3. F5再次.

结果:

该项目启动,但Web API返回500.在"输出"窗口中注意:

Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker:警告:过滤器"Microsoft.AspNet.Mvc.Filters.AuthorizeFilter"上的请求授权失败.

发布到IIS时,该项目也不起作用.

正如beta 8 声明中所述,托管模型已经发生变化,IIS正在将请求传递给Kestrel." 服务器"页面未提供任何Kestrel支持Windows身份验证的指示.是否有一些技巧可以让Windows身份验证在beta 8中运行?

c# asp.net asp.net-mvc asp.net-core-mvc asp.net-core

6
推荐指数
1
解决办法
3220
查看次数