0

我正在使用域帐户在 IIS 中运行的 CRM 进行身份验证。我想替换 REMOTE_USER 服务器变量中的反斜杠以返回而不是 Domain\User Domain_User 或类似的东西,因为当反斜杠返回到数据库时它会引发错误。我尝试编写 HTTPModule,但它在此行返回“此平台不支持操作”错误:

   oServerVars["REMOTE_USER"] = remote_user.Replace("\\", "_");

我正在使用的代码如下:

private void Context_AuthenticateRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;

        //Pulling out the Server Variables Collection
        NameValueCollection oServerVars = context.Request.ServerVariables;

        //Request REMOTE_USER Variable
        if (!string.IsNullOrEmpty(oServerVars["REMOTE_USER"]))
        {
            string remote_user = oServerVars["REMOTE_USER"];

            //Locate the server variables field in the collection   
            oServerVars = (NameValueCollection)context.Request.GetType().GetField("_serverVariables", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(context.Request);

            //Locate the readonly fields   
            PropertyInfo oReadable = oServerVars.GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);

            //Setting the new value   
            oReadable.SetValue(oServerVars, false, null);
            oServerVars["REMOTE_USER"] = remote_user.Replace("\\", "_");
            oReadable.SetValue(oServerVars, true, null);
        }
    }

我也尝试将代码放入 BeginRequest 但没有运气。有没有办法做到这一点?

4

1 回答 1

0

事实证明这是做不到的。我能找到的唯一另一种方法是创建一个新的服务器变量,将其添加到集合中并调用它。

于 2016-05-31T13:33:57.997 回答