2010-12-09 5 views
1

Ich muss einen allgemeinen Handler für alle ASP.NET MVC-Abfragen erstellen. Jetzt benutze ich Application_BeginRequest, aber es kommen nicht nur ASP.NET MVC-Abfragen.General-Handler für ASP.NET MVC-Abfragen

Die eine Option, die ich sehe, ist, einen gemeinsamen Basis-Controller zu erstellen und meine Logik in seinem Konstruktor auszuführen. Aber vielleicht gibt es andere Möglichkeiten?

+1

Eine einzige, Allzweck-Aktion? Können Sie erklären, warum das notwendig ist? Ich bin sicher, dass Sie Ihre Gründe haben, es kann nur hilfreich sein, eine Lösung zu finden, um die wahre Natur des Problems zu kennen. – David

+0

Ich muss eine Art Umleitung speziell für die Lokalisierung vornehmen. Wenn also der Benutzer Domäne/Pfad angefordert hat, möchte ich zu Domäne/Ländercode/Pfad – SiberianGuy

+0

IDSA umleiten, Sie sind richtig, dass ein Weg zu gehen wäre, d über einen Basiscontroller. Es gibt jedoch VIELE Ereignisse, die hier überschrieben werden können. nur Ihre Anforderung wird dies beleuchten. –

Antwort

2

Haben Sie in Betracht gezogen action filters?

+0

Ich würde eine wirklich globale Lösung für alle aktuellen und zukünftigen Controller und Aktionen wie Application_BeginRequest hat – SiberianGuy

+1

mvc3 hat globale Aktion Filter – redsquare

+0

redsquare, +1 für globale Aktion Filter – SiberianGuy

1

Sie müssen ActionFilter zu Ihrem Controller hinzufügen.

Um dies Sie zu tun haben, eine Klasse von Action Zum Beispiel geerbt erstellen:

Public Class CustomFilterAttribute 
    Inherits ActionFilterAttribute 
End Class 

als nur dieses Attribut-Controller gelten:

<CustomFilter()> _ 
Public Class MyController 

Es gibt 4 Methoden in ActionFilterAttribute, das überschrieben werden kann:

OnActionExecuted 
OnActionExecuting 
OnResultExecuted 
OnResultExecuting 

sie außer Kraft setzen und dieser Code wird bei jeder Anfrage an Methoden des Controllers

1

IDSA, ausgeführt werden

Sie könnten in der Lage sein, etwas unter Verwendung dieser Art von Ansatz in einer Basis-Controller rauschen:

protected override void Initialize(RequestContext requestContext) 
{ 
    Lang = requestContext.RouteData.Values["lang"].ToString() 
    ?? System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName; 

    ViewData["Lang"] = Lang; 

    base.Initialize(requestContext); 
    // your custom logic here... 
} 

oder auf:

protected override void Execute(System.Web.Routing.RequestContext requestContext) 
{ 
    base.Execute(requestContext); 
    // intercepting code here... 
} 

oder:

Wer kennt dich nicht :)