In meinem ASP.NET MVC-Controller habe ich eine Methode, die ein HttpRequest
Objekt erfordert . Ich habe nur Zugriff auf ein HttpRequestBase
Objekt.
Kann ich das irgendwie konvertieren?
Was kann / soll ich tun?
asp.net-mvc
httprequest
Pure.Krome
quelle
quelle
Antworten:
Ist es Ihre Methode, damit Sie sie neu schreiben können
HttpRequestBase
? Wenn nicht, können Sie immer den StromHttpRequest
vonHttpContext.Current.HttpRequest
weiterleiten lassen. Ich verpacke den Zugriff auf den HttpContext jedoch häufig in eine Klasse wie in ASP.NET: Entfernen von System.Web-Abhängigkeiten, um eine bessere Unterstützung für Komponententests zu erzielen .quelle
Sie sollten in Ihrer Anwendung immer HttpRequestBase und HttpResponseBase verwenden, im Gegensatz zu den konkreten Versionen, die nicht getestet werden können (ohne Typemock oder andere Magie).
Verwenden Sie einfach die HttpRequestWrapper- Klasse, um wie unten gezeigt zu konvertieren.
quelle
HttpRequestBase
undHttpResponseBase
auch verwendenHttpContextBase
. :)Sie können einfach verwenden
Der Schlüssel hier ist, dass Sie den vollständigen Namespace benötigen, um zum "richtigen" HttpContext zu gelangen.
Ich weiß, es ist 4 Jahre her, seit diese Frage gestellt wurde, aber wenn dies jemandem hilft, dann können Sie loslegen!
(Bearbeiten: Ich sehe, dass Kevin Hakanson diese Antwort bereits gegeben hat ... also hoffentlich hilft meine Antwort den Leuten, die nur Antworten und keine Kommentare lesen.) :)
quelle
Versuchen Sie, einen HttpRequestWrapper mit Ihrer HttpRequestBase zu verwenden / zu erstellen.
quelle
Um HttpRequest in ASP.NET MVC4 .NET 4.5 abzurufen, haben Sie folgende Möglichkeiten:
quelle
Wenn Sie
HttpContext
in einer Controller-Aktion auf die Eigenschaft zugreifen müssen, können Sie in der Regel das Design verbessern.Wenn Sie beispielsweise auf den aktuellen Benutzer zugreifen müssen, geben Sie Ihrer Aktionsmethode einen Parameter vom Typ
IPrincipal
, den SieAttribute
beim Testen nach Belieben mit einem und verspotten. Ein kleines Beispiel dazu finden Sie in diesem Blog-Beitrag und speziell in Punkt 7.quelle
Es gibt keine Möglichkeit, zwischen diesen Typen zu konvertieren.
Wir hatten einen ähnlichen Fall. Wir haben unsere Klassen- / Webdienstmethoden so umgeschrieben, dass sie HttpContextBase, HttpApplicationStateBase, HttpServerUtilityBase, HttpSessionStateBase ... anstelle der Typen von engen Namen ohne das Suffix "Base" (HttpContext, ... HttpSessionState) verwenden. Sie sind viel einfacher mit hausgemachtem Spott zu handhaben.
Es tut mir leid, dass du es nicht geschafft hast.
quelle
Dies ist ein ASP.Net MVC 3.0 AsyncController, der Anforderungen akzeptiert und das eingehende HttpRequestBase MVC-Objekt in ein System.Web.HttpWebRequest konvertiert. Anschließend wird die Anforderung asynchron gesendet. Wenn die Antwort zurückkommt, konvertiert sie die System.Web.HttpWebResponse zurück in ein MVC HttpResponseBase-Objekt, das über den MVC-Controller zurückgegeben werden kann.
Um diese Frage explizit zu beantworten, interessieren Sie sich vermutlich nur für die Funktion BuildWebRequest (). Es wird jedoch gezeigt, wie Sie sich durch die gesamte Pipeline bewegen - Konvertieren von BaseRequest> Request und dann Response> BaseResponse. Ich dachte, beides zu teilen wäre nützlich.
Über diese Klassen können Sie einen MVC-Server haben, der als Webproxy fungiert.
Hoffe das hilft!
Regler:
Dies ist die Proxy-Klasse, die das schwere Heben übernimmt:
quelle
Es hat funktioniert, wie Kevin gesagt hat.
Ich verwende eine statische Methode, um das abzurufen
HttpContext.Current.Request
, und habe daher immer einHttpRequest
Objekt zur Verwendung, wenn es benötigt wird.Hier in Class Helper
Hier in Controller
Hier im Blick
Meine Methode UsuarioLogado
quelle