我有一个带有Controllers
控制器的MVC WebAPI 2项目。我尝试呼叫的方法是POST
(创建)。我需要访问调用该方法的引用URL,无论我访问哪个对象,引用URL都不存在于对象中或为null。
例如,我添加了HTTPContext
引用,以下内容返回null
:
var thingythingthing = HttpContext.Current.Request.UrlReferrer;
Request
对象没有UrlReferrer
属性。
这也返回null:
HttpContext.Current.Request.ServerVariables["HTTP_REFERER"]
我无法修改标头,因为我需要能够生成方法的链接并按调用的来源过滤访问权限。
我应该看看任何特定的地方,或者,为什么那些返回null的任何特定原因?
编辑:我有一个GET方法(HttpContext.Current.Request.RequestContext.HttpContext.Request.UrlReferrer
)的解决方案,但不适用于POST方法。
答案 0 :(得分:4)
见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();