【问题标题】:Url Referrer is not available in WebApi 2 MVC projectUrl Referrer 在 WebApi 2 MVC 项目中不可用
【发布时间】:2016-07-19 14:42:22
【问题描述】:

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

例如,我添加了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 方法的解决方案。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 在这种情况下,客户端无法修改标头,因此我无法将其用于我的目的。我有一个可以使用的解决方法,但它会涉及一个中间页面来重定向呼叫。我对此并不热衷。另外,请参阅我的问题编辑;
    • 啊。那就继续吧!
    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多