ASP.Net Web应用程序Request.Params [“AUTH_USER”]为空字符串

时间:2015-12-04 18:33:16

标签: asp.net visual-studio-2012

我正在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的新手。怎么了?

2 个答案:

答案 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值。

enter image description here