我正在使用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
。
我不确定这是如何工作的?我在这里做什么错了?
答案 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";
}
让我知道这将返回什么,我可以尝试进一步帮助您。