【问题标题】:Get request origin in C# api controller在 C# api 控制器中获取请求来源
【发布时间】:2017-05-12 22:48:45
【问题描述】:

当我通过 ajax 调用调用某个 api 端点时,有没有办法在 api 控制器中获取请求源值?

例如,我从 www.xyz.com 打这个电话:

$http({
    url: 'http://myazurewebsite.azurewebsites.net/api/ValueCall/CheckForExistingValuers',
    method: "GET",
    params: { loanID: $scope.loanIdPopup }
}).success(function (data) {

}).error(function (data) {

});

一旦在 api 端,我如何获得 www.xyz.com 的价值?

CORS 工作正常。

【问题讨论】:

  • @Theo 不是重复的。
  • 怎么样?您正在寻找引荐来源网址,不是吗?
  • 如果你让 CORS 工作,你应该能够获取 Origin-header。大多数现代浏览器都发送了它。
  • 我添加了如何获取原始值表单请求的示例,但我很好奇如果您有 EnableCors 属性或 web.config 部分或配置原始值的自定义 cors 策略,为什么需要它

标签: c# asp.net-web-api cors httpwebrequest httprequest


【解决方案1】:
var originValue = Request.Headers["Origin"].FirstOrDefault();

// or

StringValues originValues;
Request.Headers.TryGetValue("Origin", out originValues);

【讨论】:

    【解决方案2】:

    您可以通过当前的 HTTP 请求标头集合从 API 方法中获取它:

      IEnumerable<string> originValues;
      Request.Headers.TryGetValue("Origin", out originValues)
    

    【讨论】:

    • 在 .Net Core 中执行此操作的正确方法
    【解决方案3】:

    您正在寻找的可能是 origin-header。如果您正在执行跨域请求,所有现代浏览器都会发送它。

    ApiController 中,您可以这样获取它:

    if (Request.Headers.Contains("Origin"))
    {
        var values = Request.Headers.GetValues("Origin");
        // Do stuff with the values... probably .FirstOrDefault()
    }
    

    【讨论】:

    • 我收到此错误:"ExceptionMessage": "The given header was not found.", "ExceptionType": "System.InvalidOperationException", 我正在使用 Postman。
    • 那么消费者可能不会发送该标头。但是如果是跨域的,所有现代浏览器都会发送它。
    • Ahhhhhh...我使用的Url是“localhost”只是在VS中调试并运行邮递员,也许这就是为什么?
    • 可能就是这样。当使用 ajax 从一个域向另一个域发送请求时,浏览器会添加标头。
    • 你是对的,它在另一个解决方案中有效,但在 Postman 中无效。惊人的。谢谢!在您上次回答之前,我已经 +1 了您的回答;)
    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 2019-04-23
    • 1970-01-01
    • 2023-03-20
    • 2019-07-12
    • 2012-12-08
    • 2020-09-07
    • 1970-01-01
    相关资源
    最近更新 更多