查找使用webapi-2调用api的网址

时间:2018-12-04 17:28:10

标签: asp.net-web-api

所以我有一个网站,可以说它的website1.com。我从这个网站呼唤到一个api,可以说它的webapi.com/api /

一旦我进入get / post /,我想获取该URL。但是,我不需要webapi.com/api网址,但我想要website1.com网址。

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

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作为参数发送,但我很好奇是否可行。

2 个答案:

答案 0 :(得分:2)

您需要的是推荐人

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

检查以下答案: https://stackoverflow.com/a/38462860/7720

答案 1 :(得分:0)

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

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

request.url是website1.com。现在,在我的代码中,我有一个拦截器,因此任何进行的http调用都将被拦截,然后添加在角度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的网址为website1.com。然后,您可以根据需要使用或发送此字符串。

希望这会有所帮助。