C#. Net Базовый WebAPI - как вернуть / перенаправить на веб-страницу - PullRequest
0 голосов
/ 09 января 2020

У меня есть WebAPI. Как я могу вернуться и открыть веб-страницу. Например, я хочу открыть страницу CNN.com.

  [HttpGet]
        public HttpResponseMessage Get()
        {
            //TODO: OPEN THE CNN.COM WEB PAGE 

Я видел такие примеры:

   try {
        var response = Request.CreateResponse(HttpStatusCode.Redirect); // tried MOVED too
        response.Headers.Location = new Uri("cnn.com");
        return response;
    } catch (Exception e) {
        ErrorSignal.FromCurrentContext().Raise(e);
        return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
    }

Но Request.CreateResponse не поддерживается в. Net Core 3

Есть идеи? Спасибо заранее

Ответы [ 3 ]

3 голосов
/ 09 января 2020

Не вернуть HttpResponseMessage. В этом нет необходимости, и это только усложняет ситуацию, чем нужно. Вместо этого верните IActionResult:

[HttpGet]
public IActionResult Get()
{
    return Redirect("https://cnn.com");
}

Я думаю, что ваши логики c здесь более сложны, потому что иметь конечную точку API, которая ничего не делает, кроме перенаправления на совершенно другой сайт, не имеет смысла. Использование IActionResult в качестве возврата позволяет вам возвращать несколько различных типов результатов. Например, вы можете сделать что-то вроде:

if (!ModelState.IsValid)
    return BadRequest(ModelState);

// do something
return Ok();

Перенаправления, как правило, не имеют большого смысла в API, потому что большинство клиентов, которые будут взаимодействовать с API, не работают, как веб-браузер. , Перенаправление на самом деле является полным ответом. Веб-браузеры берут на себя обязательство автоматически переходить по URL-адресу в заголовке Location этого ответа, поэтому он удобен для конечного пользователя. Однако большинство тонких клиентов не будут автоматически следовать перенаправлениям по умолчанию. Программист, использующий ваш API, должен добавить код, чтобы обнаружить, что произошло перенаправление, и затем выполнить новый запрос для этого нового URL. Перенаправление на что-то похожее на домашнюю страницу CNN имеет еще меньше смысла, потому что ответ не был бы тем, с чем программист, использующий ваш API, мог бы действительно что-то сделать. Например, они никогда не вернут HTML из своего ответа, например HttpClient, потому что он не будет работать, если не будет хостинга на CNN.com. Я знаю, что это был, вероятно, надуманный пример, но в целом стоит упомянуть. Ответом от API должны быть данные, а не такие вещи, как HTML, поскольку в контексте API не имеет смысла получать HTML.

1 голос
/ 09 января 2020

Размещение в качестве ответа. Дайте мне знать, если это работает.

try {
        var response = new HttpResponseMessage(HttpStatusCode.Redirect);
        response.Headers.Location = new Uri("cnn.com");
        return response;
    } catch (Exception e) {
        ErrorSignal.FromCurrentContext().Raise(e);
        return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
    }
1 голос
/ 09 января 2020

попробуйте с этим

 var response = new HttpResponseMessage(HttpStatusCode.Redirect);
 response.Headers.Location = new Uri("https://insight.xxx.com");
...