2011-01-17 32 views
3

Ich betreibe eine Website auf IIS6/Server 2003, die integrierte Windows-Authentifizierung in einem lokalen Intranet verwendet. Ich kann auf der Website sehen, aber intermittierenden „Objekt null“ Fehler erhalten, wenn Sie den folgenden C# -Code aufrufen, die bei jeder Anfrage aufgerufen:ASP.NET MVC: Wie kann IPrincipal null sein?

.... 
GetUserIdFromPrincipal(User) 
.... 

public static string GetUserIdFromPrincipal(IPrincipal principal) {  
    return principal.Identity is WindowsIdentity ? (principal.Identity as WindowsIdentity).User.Value : principal.Identity.Name; 
} 

So wie der Fehler intermittierend ist eindeutig Windows-Auth wird auf einer bestimmten Ebene arbeiten, aber Nachdem ich mehrere Klicks durch die Site navigiert habe, bekomme ich den NULL-Referenzfehler, was bedeutet, dass IPrincipal null ist (ich dachte, in ASP.NET sollte das nie Null sein).

Der Fehler tritt nur bei einer neu erstellten VM auf. Der Code ist gut auf anderen Maschinen und sicherlich bei der Entwicklung vor Ort.

Fordert IIS bei jeder Anforderung die Windows-Auth-Details an? Was würde solch ein intermittierendes Problem verursachen? Jede Hilfe oder Vorschläge wären sehr willkommen.

Antwort

2

Ich denke in dem Fall oben war, weil wir Windows Auth und Anonym in IIS6 überprüft hatten. Dies schien die Situation zu schaffen, dass IIS manchmal Windows Auth verwendet und somit ein IPrincipal erstellt, aber andere Male würde anonyme Authentifizierung verwenden, die kein IPrinciple erstellen würde. Sicherlich hat das Deaktivieren der Option Anonymous Auth das Problem gelöst.

2

Ich würde vorschlagen, dass Ihre Identität ist einfach keine WindowsIdentity und daher der Fall wird fehlschlagen und zu einem Null-Objekt führen. IIdenty könnte Formsidentity, Clientforms, Generic, und Passportidentity Windows sein, ich denke, Sie sollten versuchen,

 

typeof(principal.Identity); 
 

die reale eins zu bekommen.

+0

Nützliche Informationen über die verschiedenen Formen der Identität. Danke für die Antwort. –

Verwandte Themen