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 并在浏览器中启动我的应用程序时,所有这些方法都很好。我在做什么错误。
提前致谢。
我找到了解决方案。
我在我的 IIS 中做了下面的事情。双击身份验证。
属性 -> launchSettings.json和web.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 和其他人在浏览器中调用我的应用程序后,它运行良好。