我有一个使用.NET 4网站的MVC Razor,它使用Windows目录服务进行授权。此站点仅在开发服务器上遇到授权问题。它在Localhost和Production Server上运行良好。
这个问题在周末开始,IT告诉我他们对DEV服务器运行了以下更新(非生产):
这是我对开发服务器环境的唯一更改,但我的问题同时开始。
当我在dev服务器上访问此站点时, WebSecurity.GetUserId 不会返回UserId(但它仍然在localhost和prod服务器上执行) dev server它返回-1而不是我的UserId。
此时我不确定(1)IT更新是否导致此问题,(2)他们是否进行了另一项我不知道的更改,或(3)我的代码是否需要更新以使用这些更新(或我不知道的未知更改)。
这是代码......
HomeController.cs
[AppendTrailingSlash]
[InitializeSimpleMembership]
[RequireAuthorization]
public class BaseController : Controller
{
public UnitOfWork unitOfWork = new UnitOfWork();
public UserProfile _get_user()
{
int user_id = WebSecurity.GetUserId(User.Identity.Name);
if (user_id == -1)
{
//Error getting user log them out
WebSecurity.Logout();
Session.Abandon();
Response.Redirect(Request.Url.AbsoluteUri);
}
return unitOfWork.UserProfileRepository.dbSet.Single(u => u.UserId == user_id);
}
public UserProfile user
{
get
{
if (!WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
return _get_user();
}
}
public BaseController()
{
System.Web.HttpContext.Current.Items["MyAppUnitOfWork"] = unitOfWork;
}
protected override void Dispose(bool disposing)
{
unitOfWork.Dispose();
base.Dispose(disposing);
}
}
public class HomeController : BaseController
{
public ActionResult Home()
{
bool show_myapp = user.is_myapp_authorized;
string return_url = Request.QueryString["ReturnUrl"];
if (return_url != null)
{
Response.Redirect(return_url);
}
ViewBag.show_myapp = show_myapp;
ViewBag.user = user;
return View();
}
public ActionResult Logout()
{
WebSecurity.Logout();
Session.Abandon();
return this.Content("{\"logout\": \"true\"}", "application/json");
}
}