2016-07-19 46 views
1

Ich habe ein MVC WebAPI 2 Projekt mit einem Controllers Controller. Die Methode, die ich aufrufen möchte, lautet POST (Erstellen). Ich muss auf die verweisende URL zugreifen, die diese Methode bereits aufgerufen hat. Unabhängig davon, auf welches Objekt ich zugreife, ist die verweisende URL entweder nicht im Objekt vorhanden oder ist null.URL Referrer ist nicht verfügbar in WebApi 2 MVC Projekt

Zum Beispiel habe ich hinzugefügt, um die HTTPContext Referenz und die folgenden Renditen null:

var thingythingthing = HttpContext.Current.Request.UrlReferrer; 

Das Request Objekt keine UrlReferrer Eigenschaft hat.

Dieser Wert null zurück und:

HttpContext.Current.Request.ServerVariables["HTTP_REFERER"] 

ich nicht die Header ändern kann, weil ich einen Link zu dem Verfahren und Filter Zugang nach Herkunft des Anrufs zu erzeugen, müssen in der Lage.

Irgendein bestimmter Ort, den ich aussehen sollte oder, alternativ, einen bestimmten Grund, warum diese Null zurückgeben?

Edit: Ich habe eine Lösung für GET-Methoden (HttpContext.Current.Request.RequestContext.HttpContext.Request.UrlReferrer), aber nicht für POST-Methoden.

Antwort

2

Siehe this answer. Grundsätzlich verwenden WebAPI-Anfragen eine andere Art von Anfrageobjekt. Sie können jedoch eine Erweiterungsmethode erstellen, die eine UrlReferrer für Sie bereitstellt. Aus der verknüpften Antwort:

Erstens können Sie HttpRequestMessage erweitern, um ein UrlReferrer() Verfahren bereitzustellen:

public static string UrlReferrer(this HttpRequestMessage request) 
{ 
    return request.Headers.Referrer == null ? "unknown" : request.Headers.Referrer.AbsoluteUri; 
} 

Dann müssen Sie Ihre Kunden des Referrer Header ihre API Request setzen:

// Microsoft.AspNet.WebApi.Client 
client.DefaultRequestHeaders.Referrer = new Uri(url); 

Und nun die Web API Request enthält die Referrer-Daten, auf die Sie so von Ihrer Web API zugreifen können:

Request.UrlReferrer(); 
+0

Die Header können in diesem Fall nicht vom Client geändert werden, so dass ich dies nicht für meine Zwecke verwenden kann. Ich habe eine Problemumgehung, die ich verwenden könnte, aber es würde eine Zwischenseite einbeziehen, um den Anruf umzuleiten. Ich bin nicht scharf darauf. Siehe auch meine Frage bearbeiten; – MetalPhoenix

+0

Ah. Mach weiter, dann! –