Как программно построить URL сервера? - PullRequest
0 голосов
/ 13 июня 2019

Я не знаю, как создать URL-адрес сервера из данных сервера без его жесткого кодирования.

Например, с помощью приведенного ниже класса вы можете получить доступ к методу GetLoginQRCode со следующим URL-адресом в браузере: http://localhost:5001/api/site

В методе GetLoginQRCode я хотел бы создать URL для метода входа в систему.Я не знаю, как получить данные для построения URL, например http://localhost:5001/api/site/login

Очевидно, /login может быть жестко запрограммирован.Но я не хочу жестко кодировать http или localhost, ни путь api/site.

[Route("api/[controller]")]
[ApiController]
public class SiteController : ControllerBase
{
    [HttpGet]
    public IActionResult GetLoginQRCode()
    {
        var thisServerloginUrl = "http://localhost:5001/api/dealer/login";

        /*
            what I would like is to programatically build the URL something like this
            var thisServerloginUrl = [whatever I need here] + "/login"
        */

        return Ok();
    }

    [HttpGet]
    [Route("login")]
    public IActionResult Login()
    {
        return Ok();
    }
}

Есть ли способ, которым я могу получить все это через переменные сервера, чтобы я мог сделатьВам не нужно жестко его кодировать?

Редактировать : Я не перенаправляю пользователя на другой URL.Я собираюсь создать QR-код с URL-адресом в качестве данных QR-кода.QR-код будет возвращен в результате вызова метода GetLoginQRode.Мне НЕ НУЖНО помочь с кодом Qr, так как у меня это работает.Я не включил его в пример, чтобы сделать код простым.

1 Ответ

3 голосов
/ 13 июня 2019

Каждый контроллер имеет свойство с именем Url, для которого установлена ​​реализация IUrlHelper.Используйте его для генерации абсолютного URL.Приложение не знает о своем происхождении / домене или протоколе.Они не могут быть надежно извлечены из запроса, поскольку приложение может находиться за прокси-серверами, которые изменяют заголовки и завершают ssl.Используйте значение конфигурации, чтобы добавить протокол и домен к URL-адресу.

[HttpGet]
public IActionResult GetLoginQRCode()
{

   // In same controller
   var url = Url.Action("Login")

   // or in Different Controller
   var url = Url.Action("Login", "Account")

   return Ok();
}

Ссылка API описывает все возможные варианты.

...