ASP.NET 核心 1.0,模拟
本文关键字:模拟 NET 核心 ASP | 更新日期: 2023-09-27 18:33:13
我正在编写一个内联网应用程序。project.json 中的目标框架是 dnx451。这是我的发布命令:
dnu publish --runtime dnx-clr-win-x86.1.0.0-rc1-update1 --no-source
数据库连接字符串:
Server=name;Database=name;Trusted_Connection=True;
我正在尝试模拟数据库访问,但它不起作用。当我启动应用程序时,我的Windows用户被识别出来,它说你好,右上角的域''用户名。一旦我尝试访问数据库,我就会收到错误"用户域''计算机名登录失败"。如果我在我的用户下运行应用程序池,那么一切正常。
二、.NET CLR Versio 是 v4.0,Managed Pipline Mode Classic 和 Identity 是 ApplicationPoolIdentity。网站身份验证:启用 ASP.NET 模拟和 Windows 身份验证。
我需要什么来改变模拟终于起作用了?
Core 不支持模拟,因为所有 Web 代码都脱离了 proc,由 Kestrel 托管。如果要执行此操作,则需要将当前主体作为 WindowsPrincipal,然后在需要它的位置手动模拟。
需要注意的一点是,在RC1中,你没有WindowsPrincipal,所以你现在不能这样做。它将在 RC2 中修复。
如果您希望每个页面请求都模拟用户,则可以将自己的中间件配置为在 MVC 之前运行;
public class Impersonate
{
private readonly RequestDelegate next;
public Impersonate(RequestDelegate next) {
this.next = next;
}
public async Task Invoke(HttpContext context) {
var winIdent = context.User.Identity as WindowsIdentity;
if (winIdent == null) {
await next.Invoke(context);
}else {
WindowsIdentity.RunImpersonated(winIdent.AccessToken, () => {
next.Invoke(context).Wait();
});
}
}
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
....
app.UseMiddleware<Impersonate>();
app.UseMvc(...);
...
}