2016-07-19 5 views
1

У меня есть проект MVC WebAPI 2 с контроллером Controllers. Метод, который я пытаюсь назвать, - POST (Создать). Мне нужно получить доступ к ссылочному URL-адресу, который вызвал этот метод, независимо от того, к какому объекту я обращаюсь, ссылочный URL-адрес либо не существует в объекте, либо имеет значение null.URL-адрес реферала не доступен в проекте WebApi 2 MVC

К примеру, я добавил HTTPContext ссылки и следующие возвращения null:

var thingythingthing = HttpContext.Current.Request.UrlReferrer; 

Объект Request не имеет UrlReferrer свойства.

Это возвращает нуль, а также:

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

Я не могу изменить заголовки, потому что мне нужно, чтобы иметь возможность генерировать ссылку на метод и фильтра доступа по происхождению вызова.

Любое конкретное место, которое я должен посмотреть, или, в качестве альтернативы, любую конкретную причину, по которой они возвращают нуль?

Редактировать: У меня есть решение для методов GET (HttpContext.Current.Request.RequestContext.HttpContext.Request.UrlReferrer), но не для методов POST.

ответ

2

См. this answer. В основном, запросы WebAPI используют другой тип объекта запроса. Однако вы можете создать метод расширения, который предоставляет вам UrlReferrer. Из связанного ответа:

Во-первых, вы можете продлить HttpRequestMessage обеспечить UrlReferrer() метод:

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

Тогда ваши клиенты должны установить Referrer Header в их API Request:

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

и теперь Web API Request содержит данные реферера, к которым вы можете получить доступ, как это от Web API:

Request.UrlReferrer(); 
+0

В этом случае заголовки не могут быть изменены клиентом, поэтому я не могу использовать это для своих целей. У меня есть обходное решение, которое я мог бы использовать, но для перенаправления вызова будет промежуточная страница. Я не увлекаюсь этим. Также см. Редактирование вопроса; – MetalPhoenix

+0

Ах. Продолжайте! –

 Смежные вопросы

  • Нет связанных вопросов^_^