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

时间:2016-07-19 14:42:23

标签: c# asp.net-mvc-4 controller asp.net-web-api2 httpcontext

我有一个带有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方法。

1 个答案:

答案 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();