2016-08-16 4 views
1

Ich verwende Imageresizer 4 in einer MVC 5-Anwendung. Wir haben die Notwendigkeit, die Bildanfragen zu authentifizieren, so dass wir das folgende Ereignis verwenden:Imagebesitzer-Authentifizierung mit Owin

protected void Application_Start() { ImageResizer.Configuration.Config.Current.Pipeline.AuthorizeAllImages = true; ImageResizer.Configuration.Config.Current.Pipeline.AuthorizeImage += AuthorizeImage; }

Die AuthorizeImage Methode sieht wie folgt aus:

private static void AuthorizeImage(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) { //This line throws an exception if runAllManagedModulesForAllRequests is set to false var owinContext = context.GetOwinContext(); Authorize(context, owinContext); }

Das Problem ist, dass wir Owin verwenden Also brauchen wir den OwinContext vom HttpContext. Wenn die GetOwinContext Methode rufen wir die folgende Fehlermeldung erhalten:

Kein owin.Environment Element im Kontext

Wenn ich die runAllManagedModulesForAllRequests auf true in web.config gesetzt gefunden wurde, funktioniert alles, wie es sollte.

Aber ich möchte runAllManagedModulesForAllRequests nicht verwenden, da es eine Auswirkung auf die Leistung hat.

Meine Frage ist: Kann ich irgendwie zwingen, die OWIN-Middleware vor einem bestimmten HttpModule auszuführen?

So etwas wie dieses (Pseudo-Code):

<modules runAllManagedModulesForAllRequests="false"> <add name="ImageResizingModule" type="ImageResizer.InterceptModule" modulesToRunBefore="Owin........" /> </modules>

Antwort

0

Nein, Sie runAllManagedModulesForAllRequests=true müssen, es sei denn, Sie ändern können, wie das owin Modul registriert ist, und sagen es für alle Anforderungen zu laufen .