无法在Web Api控制器中设置HttpResponseMessage的RequestUri

时间:2019-05-22 17:24:45

标签: c# asp.net-mvc asp.net-web-api httpclient

我正在使用HttpClient调用2个API(一个原始的和另一个模拟的)。

因此,如果API调用的URL为https://something.com/abc/xyz,则当我在响应中将此URL张贴到该URL时,RequestMessage.RequestUri具有特定值,即https://something.com/mno/eee?key=asdad

要复制此行为,我有一个Web api控制器设置-

public class JqPay2Controller : ApiController
{
    [HttpPost]
    [ActionName("donotcare")]
    public HttpResponseMessage DoNotCare()
    {
        var uri = new Uri("https://localhost:3232/mno/eee?key=asdad");
        var contentStr = $"donotcare";
        var res = new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new StringContent(contentStr),
            RequestMessage = new HttpRequestMessage(HttpMethod.Post, uri)
        };
        return res;
    }
}

我的应用程序将在模拟模式下调用,我希望在RequestMessage.RequestUri属性中看到相同的值。

但是我没有看到它,相反,当我期望看到https://something.com/abc/xyz时看到了https://localhost:3232/mno/eee?key=asdad

我不确定这是如何工作的?我在这里做什么错了?

1 个答案:

答案 0 :(得分:0)

尝试此代码...

[HttpPost]
[ActionName("donotcare")]
public async Task<HttpResponseMessage> DoNotCare()
{
    using(HttpClient client = new HttpClient())
    {
       client.BaseAddress = new Uri("http://localhost:3232/"); 

       var request = new HttpRequestMessage
         (HttpMethod.Post, "abc/xyz");  // or "mno/eee?key=asdad"

       HttpResponseMessage response = await client.SendAsync(request);

       return response;
    }
}

您的代码库中是否有API端点的路由[“ abc / xyz”]?或者您实际上是在尝试使用实时外部API?如果是这样,请将client.BaseAddress更改为“ https://something.com/api”。同样,在HttpMethod.Post之后,将“ abc / xyz”更改为它们的实际终点。例如。

[HttpPost, Route("abc/xyz")]
public string DoNotCareEndPoint()
{
    return "https://localhost:3232/mno/eee?key=asdad";
}

让我知道这将返回什么,我可以尝试进一步帮助您。