Невозможно установить RequestUri для HttpResponseMessage в контроллере Web Api - PullRequest
0 голосов
/ 22 мая 2019

Я вызываю 2 API (один оригинал и другой макет), используя HttpClient.

Таким образом, если URL-адрес вызова API равен https://something.com/abc/xyz, когда я POST к этому URL-адресу в ответе, RequestMessage.RequestUri имеет определенное значение, т.е. https://something.com/mno/eee?key=asdad.

Чтобы повторить это поведение, у меня есть настройка контроллера веб-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 голосов
/ 22 мая 2019

Попробуйте этот код ...

[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";
}

Позвольте мнеЯ знаю, к чему это приведет, и я могу попытаться помочь вам в дальнейшем.

...