ASP.NET Core 在部署到 IIS 并在浏览器中启动时让用户无法工作

Zig*_*ler 1 c# iis asp.net-core-mvc

这不是一个重复的问题(据我研究)。我的问题是,当我在 VS 2019 中运行 ASP.NET Core 2.1 MVC 应用程序时一切正常,但是当我部署到本地 IIS 并在浏览器中启动我的应用程序时,它无法正常工作。我的操作系统是 Windows 10。

我在 IIS 中开启了以下功能

在此处输入图片说明

我正在下面获取在浏览器中启动我的 ASP.NET Core 2.1 MVC 应用程序的人的用户名。

属性 - > launchSettings.json

"windowsAuthentication": true,
 "anonymousAuthentication": false,
Run Code Online (Sandbox Code Playgroud)

在 Startup.cs 中

public void ConfigureServices(IServiceCollection services)
{
   services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
Run Code Online (Sandbox Code Playgroud)

在 Helper.cs 中

public static string GetUserName(IHttpContextAccessor httpContextAccessor)
{
  string userName = string.Empty;
  if(httpContextAccessor != null &&
     httpContextAccessor.HttpContext != null &&
     httpContextAccessor.HttpContext.User != null &&
     httpContextAccessor.HttpContext.User.Identity != null)
    {
        userName = httpContextAccessor.HttpContext.User.Identity.Name;
        string[] usernames = userName.Split('\\');
        userName = usernames[1].ToUpper();
    }
        return userName;
}
Run Code Online (Sandbox Code Playgroud)

在 MyController.cs 中

public class MyController : Controller
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public MyController(IHttpContextAccessor httpContextAccessor)
    {
      _httpContextAccessor = httpContextAccessor;            
    }

    [HttpPost]
    public JsonResult CreateOrder([FromBody] OrderModel model)
    {
      string username = Helper.GetUserName(_httpContextAccessor);
      .....
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在 VS 2019 中运行我的应用程序时一切正常,但是当我将我的应用程序发布到 IIS 并在浏览器中启动我的应用程序时,由于httpContextAccessor.HttpContext.User.Identity.Name 为 空,我收到错误。

我还尝试了各种方法,例如使用 Claims 的 FindFirst,但是当我在 VS 2019 中运行但没有将我的应用程序发布到 IIS 并在浏览器中启动我的应用程序时,所有这些方法都很好。我在做什么错误。

提前致谢。

Zig*_*ler 6

我找到了解决方案。

我在我的 IIS 中做了下面的事情。双击身份验证。

在此处输入图片说明

在此处输入图片说明

属性 -> launchSettings.jsonweb.config没有解决问题。

在 Starup.cs 中,

public void ConfigureServices(IServiceCollection services)
{
  services.AddHttpContextAccessor();
}
Run Code Online (Sandbox Code Playgroud)

在 Helper.cs 中

public static string GetUserName(IHttpContextAccessor httpContextAccessor)
{
   string userName = string.Empty;
   if(httpContextAccessor != null &&
      httpContextAccessor.HttpContext != null &&
      httpContextAccessor.HttpContext.User != null &&
      httpContextAccessor.HttpContext.User.Identity != null)
      {
        userName = httpContextAccessor.HttpContext.User.Identity.Name;
        string[] usernames = userName.Split('\\');
        userName = usernames[1].ToUpper();
      }
      return userName;
}
Run Code Online (Sandbox Code Playgroud)

在 MyController.cs 中- 我将 Authorize 标记添加到我的操作方法中。

public class MyController : Controller
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public MyController(IHttpContextAccessor httpContextAccessor)
    {
      _httpContextAccessor = httpContextAccessor;            
    }

    [HttpPost]
    [Authorize]
    public JsonResult CreateOrder([FromBody] OrderModel model)
    {
      string username = Helper.GetUserName(_httpContextAccessor);
      .....
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我在 VS 2019 中调试以及发布到 IIS 和其他人在浏览器中调用我的应用程序后,它运行良好。