我正在使用域帐户在 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 但没有运气。有没有办法做到这一点?