我正在Visual Studio 2012中构建一个ASP.Net 4.5 Web应用程序。我将以下代码放在我的Global.asax.cs中:
protected void Session_Start(object sender, EventArgs e)
{
Session["LastError"] = "";
// Code that runs when a new session is started
string delimStr = @"\";
char[] delimiter = delimStr.ToCharArray();
string[] requestor = Request.Params["AUTH_USER"].ToString().Split(delimiter, 2);
string requestorEID = requestor[1];
Session["UserID"] = requestorEID;
//Get User data (name, roleid, rolename) from database
List<SqlParameter> paramList = new List<SqlParameter>();
paramList.Add(new SqlParameter("@EmployeeID", requestorEID));
DataTable dtUserList = KLClassLibrary.KLDataAccessLayer.ExecuteSelect("GetUserData", paramList, "OffSiteCN");
if (dtUserList.Rows.Count > 0)
{
Session["EmployeeName"] = dtUserList.Rows[0]["EmployeeName"].ToString();
}
else
{
Session["LastError"] = "You Are Not Authorized To Access This Application";
Session["EmployeeName"] = "";
Response.Redirect("~/ErrorPage.aspx");
}
}
每当我的代码到达
行string[] requestor = Request.Params["AUTH_USER"].ToString().Split(delimiter, 2);
Request.Params [“AUTH_USER”]等于空字符串。我已成功使用此代码多年,虽然我是VS2012和.Net 4.5的新手。怎么了?
答案 0 :(得分:0)
这不是一个完整的解决方案,但我可以使用以下代码创建一个解决方法:
string requestor = Request.LogonUserIdentity.Name.ToString();
int requestor_length = requestor.Length;
string requestorEID = requestor.Substring(requestor_length - 5, 5);
Session["UserID"] = requestorEID;
答案 1 :(得分:0)
确保在项目的属性中启用了“Windows身份验证”(它是属性列表的最底层)。这将允许IISExpress使用Windows身份验证。
然后确保您拒绝访问web.config的system.web授权部分,system.webServer或两者中的匿名用户。
对于IIS 6.5或更低版本:
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
对于IIS 7或更高版本
<system.webServer>
<security>
<authorization>
<add accessType="Deny" users="?"/>
</authorization>
</security>
</system.webServer>
您还可以在这些部分中设置Windows身份验证模式,但服务器必须允许您覆盖其默认设置。 IISExpress未设置为允许覆盖此值,因此您无法尝试将其设置为调试模式。
旧版Visual Studio使用Cassini模拟Web服务器以进行调试。现在它使用IISExpress,它将为您提供更真实的IIS服务器体验。过去某些场景在Cassini和您的实际IIS服务器之间会有所不同 - 现在我遇到这些问题的情况很少见。但是,通过正确的配置设置,您可以在会话开始时获得AUTH_USER值。