我不是开发人员。 我正在进入移民项目。我正在尝试将应用程序从VS 2010迁移到VS 2013,在VS 2010中,应用程序运行正常,没有任何错误。
但是在迁移之后,运行应用程序时会出现以下运行时错误。我刚刚被困在这里。
System.Web.dll中出现'System.InvalidOperationException'类型的异常,但未在用户代码中处理
附加信息:此方法只能在调用之后调用 认证事件。
Global.asax中的小代码用于检查应用程序的权限。
public void Application_BeginRequest(object sender,EventArgs e)
{
if (!Request.Path.Contains("NoAccess"))
{
//Checks rights to application
var secData = SecurityProvider.GetSecurityData("TEST", Request.LogonUserIdentity, false);
var access = new SecurityClient(secData).HasAccess("TEST", SecurityAccessLevel.Read);
if (!access)
{
Response.Redirect("NoAccess");
}
}
错误指向Request.LogonUserIdentity
请帮我解决这个问题。
答案 0 :(得分:2)
"您将收到一个ASP.NET 500 - 服务器错误:此方法只能在身份验证事件后调用。在PostAuthenticateRequest之前访问时,HttpRequest.LogonUserIdentity会抛出InvalidOperationException,因为在客户端经过身份验证之前,此属性的值是未知的。"
解决方法是将代码移入PostAuthenticateRequest事件(或更高版本)
请将此添加到您的Global.asax
protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e)
{
if (!Request.Path.Contains("NoAccess"))
{
//Checks rights to application
var secData = SecurityProvider.GetSecurityData("TEST", Request.LogonUserIdentity, false);
var access = new SecurityClient(secData).HasAccess("TEST", SecurityAccessLevel.Read);
if (!access)
{
Response.Redirect("NoAccess");
}
}
}
然后删除Application_BeginRequest事件中的所有代码。