【问题标题】:Find the url that Calls an api using webapi-2使用 webapi-2 查找调用 api 的 url
【发布时间】:2018-12-04 17:28:10
【问题描述】:

所以我有一个网站,可以说它的 website1.com。从这个网站我调用一个 api 让我们说它的 webapi.com/api/

一旦我在我的 get/post/ 中,我想获取 url。但是我不想要 webapi.com/api url 我想要 website1.com url。

是否可以找到调用该api的网站的url?因为目前任何研究都只提出

Url.Request.RequestUri.AbsoluteUri

但这会产生 webapi.com/api 这不是我想要的。

任何帮助将不胜感激。

这是我开始工作的一个快速代码示例。

[Route("")]
        public IHttpActionResult Get()
        {
            try
            {
                return this.Url.Request.RequestUri.AbsoluteUri;
            }
            catch (Exception e)
            {
                ErrorLogService.SaveErrorLog(e, this.User.Identity.Name);
                return InternalServerError();
            }
        }

注意我正在尝试在 api 中查找向 api 发送请求的 url。如果这是不可能的,我必须将 url 作为参数发送,但我很好奇它是否可能。

【问题讨论】:

    标签: asp.net-web-api


    【解决方案1】:

    您正在寻找的是REFERRER

    在 WebApi 2 中你没有它,但你可以解决它。

    检查这个答案: https://stackoverflow.com/a/38462860/7720

    【讨论】:

      【解决方案2】:

      解决方案是我标记的,但是为了获得更完整的答案,我将在此处发布。事实上,您必须将推荐人从 website1 传递到 webapi.com/api。但是,您不必将其作为参数传递。

      您可以做的,或者至少我所做的,就是以与使用授权令牌相同的方式传递它。 @Romias 提供的链接也可以作为解决方案。在您传递 Bearer: 'your token' 的任何地方,您只需添加另一个名为 Referrer: request.url 的标头。

      这里的 request.url 是 website1.com。现在,在我的代码中,我有一个拦截器,因此任何进行的 http 调用都会被拦截,然后我添加在 angular 5 中看起来像这样的不记名令牌。您的设置可能会有所不同。

       export class JwtInterceptor implements HttpInterceptor {
              intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      
                if (temp && temp.access_token) {
                  request = request.clone({
                      setHeaders: {
                          Authorization: `Bearer ${temp.access_token}`
                      }
                  });
              }
      
              return next.handle(request);
          }
      }
      

      从那里我只是附加了授权行,看起来像这样。

      Authorization: `Bearer ${currentUser.access_token}`, Referrer:request.url
      

      所以你可以看到我添加了一个名为 Referrer 的新标头并将其设置为 url。

      从那里您前往 api 并喜欢链接的答案,您只需将此代码放入您的 api 方法中

      public IHttpActionResult Get()
              {
                  try
                  {
      var temp = Request.Headers.Referrer == null ? "unknown" : Request.Headers.Referrer.AbsoluteUri;
                      return temp;
                  }
                  catch (Exception e)
                  {
                      ErrorLogService.SaveErrorLog(e, this.User.Identity.Name);
                      return InternalServerError();
                  }
              }
      

      现在 temp 的 URL 为 website1.com。然后,您可以随意使用或发送此字符串。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-09-06
        • 2016-07-31
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 2020-10-21
        • 2018-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多