public async Task ReturnCorrectStatusCodeAfterProxyingCallAsync() { // Arrange IProxyRelayCallService proxyRelayCallService = A.Fake <IProxyRelayCallService>(); ILogger logger = A.Fake <ILogger>(); var sut = new ProxyRelayCallApi(proxyRelayCallService); var httpContext = new DefaultHttpContext(); var httpRequest = new DefaultHttpRequest(httpContext) { Query = new QueryCollection(new Dictionary <string, StringValues>() { { "url", "/testhost/value" } }), Method = HttpMethods.Post, Body = new MemoryStream(Encoding.UTF8.GetBytes("bodyContent")) }; var contentResult = "randomContent"; A.CallTo(() => proxyRelayCallService.ProxyRelayCallAsync(TestHelper.TenantId.ToString(), "bodyContent", new HttpMethod("post"), null, "/testhost/value")).WithAnyArguments().Returns(new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(contentResult) }); // Act IActionResult actual = await sut.RelayCallAsync(httpRequest, TestHelper.TenantId.ToString(), logger); // Assert Assert.Equal(HttpStatusCode.OK, (HttpStatusCode)((ContentResult)actual).StatusCode); Assert.Equal(contentResult, ((ContentResult)actual).Content); }
public async Task <IActionResult> RelayCallAsync( [HttpTrigger(AuthorizationLevel.Function, "get", "post", "put", "patch", "delete", Route = "proxyrelay/{tenantid}")] HttpRequest req, string tenantId, ILogger log) { if (!Guid.TryParse(tenantId, out Guid tenantIdGuid)) { return(new BadRequestResult()); } var requestBody = await new StreamReader(req.Body).ReadToEndAsync(); string url = req.Query["url"]; if (string.IsNullOrWhiteSpace(url)) { throw new InvalidOperationException(nameof(url)); } HttpResponseMessage response = await _proxyRelayCallService.ProxyRelayCallAsync(tenantId, requestBody, new HttpMethod(req.Method), req.Headers, url); return(new ContentResult() { Content = await response.Content.ReadAsStringAsync(), ContentType = "text/plain", StatusCode = (int)response.StatusCode }); }