使用域用户 iis httpModule 进行身份验证时,替换 REMOTE_USER 服务器变量中的反斜杠

Replace backslash in REMOTE_USER Server Variable when authenticating with domain user iis httpModule

我正在使用域帐户在 IIS 中使用 CRM 运行 进行身份验证。我想将 REMOTE_USER 服务器变量中的反斜杠替换为 return 而不是 Domain\User Domain_User 或类似的东西,因为当反斜杠为 return 时它会抛出错误到数据库。我尝试编写一个 HTTPModule,但它 returns "Operation is not supported on this platform" 此行错误:

   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 中,但没有成功。有什么办法可以实现吗?

原来是做不到。我能找到的唯一其他方法是创建一个新的服务器变量,将其添加到集合中并调用该变量。