Url Referrer 在 WebApi 2 MVC 项目中不可用

Met*_*nix 5 c# controller httpcontext asp.net-mvc-4 asp.net-web-api2

我有一个带有Controllers控制器的 MVC WebAPI 2 项目。我试图调用的方法是POST(创建)。我需要访问调用该方法的引用 URL,无论我访问什么对象,引用 URL 要么不存在于对象中,要么为空。

例如,我添加了HTTPContext引用并返回以下内容null

var thingythingthing = HttpContext.Current.Request.UrlReferrer;
Run Code Online (Sandbox Code Playgroud)

Request对象不具有UrlReferrer财产。

这也返回 null:

HttpContext.Current.Request.ServerVariables["HTTP_REFERER"]
Run Code Online (Sandbox Code Playgroud)

我无法修改标头,因为我需要能够生成指向该方法的链接并按调用来源过滤访问。

我应该查看的任何特定地方,或者,为什么这些返回 null 的任何特定原因?

编辑:我有一个针对 GET 方法 ( HttpContext.Current.Request.RequestContext.HttpContext.Request.UrlReferrer)的解决方案,但没有针对 POST 方法的解决方案。

Jes*_*ith 5

看到这个答案。基本上,WebAPI 请求使用不同类型的请求对象。不过,您可以创建一个UrlReferrer为您提供 的扩展方法。从链接的答案:

首先,您可以扩展HttpRequestMessage以提供一个UrlReferrer()方法:

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

然后您的客户需要将 设置Referrer Header为他们的API Request

// Microsoft.AspNet.WebApi.Client
client.DefaultRequestHeaders.Referrer = new Uri(url);
Run Code Online (Sandbox Code Playgroud)

现在Web API Request包括引用数据,您可以像这样从您的Web API

Request.UrlReferrer();
Run Code Online (Sandbox Code Playgroud)