Ich authentifiziere mich mit einem CRM, das in IIS mit Domänenkonten ausgeführt wird. Ich möchte Backslash in der REMOTE_USER-Servervariable ersetzen, um anstelle von Domain \ User Domain_User oder etwas zu ersetzen, da es einen Fehler auslöst, wenn der umgekehrte Schrägstrich an die Datenbank zurückgegeben wird. Ich versuchte, ein Httpmodule zu schreiben, aber es gibt Fehler auf dieser Linie „Operation wird auf dieser Plattform nicht unterstützt“:Backslash in der REMOTE_USER-Servervariable ersetzen, wenn die Authentifizierung mit Domänenbenutzer erfolgt httpModule
oServerVars["REMOTE_USER"] = remote_user.Replace("\\", "_");
Der Code ich benutze ist unten:
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);
}
}
Ich habe auch versucht, den Code in BeginRequest zu setzen, aber kein Glück. Gibt es einen Weg, das zu erreichen?