Сгенерировать HTTPS-ссылку в веб-API с помощью Url.Link

#c# #asp.net #asp.net-web-api

#c# #asp.net #asp.net-web-api

Вопрос:

Мне нужно сгенерировать абсолютный URL для ASP.NET Веб-API для последующего обратного вызова / перенаправления.

Ссылка может быть сгенерирована с помощью

 Url.Link("RouteName", new { controller = "Controller", action = "Action" });
  

Это возвращает правильный URL, однако мне нужно, чтобы он всегда был https. Url.Link появляется для генерации URL-адреса, используя схему текущего запроса. Например, если запрос, генерирующий URL, выглядит примерно так http://www.myhost.com/controller/generateUrl затем Url.Link генерирует http-URL. Если запрос, генерирующий URL, https://www.myhost.com/controller/generateUrl затем Url.Link генерирует URL-адрес https.

URL-адрес всегда должен генерироваться с использованием https. Есть ли параметр или значение маршрута, которые можно передать Url.Link для достижения этой цели?

Спасибо.

Ответ №1:

Это кажется невозможным с Url.Link()

Я бы проверил HttpRequest и изменил его на https, чтобы заставить all Url.Link() возвращать ссылку https.

Что-то вроде:

         if (Url.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
        {
            var secureUrlBuilder = new UriBuilder(Url.Request.RequestUri);
            secureUrlBuilder.Scheme = Uri.UriSchemeHttps;
            Url.Request.RequestUri = new Uri(secureUrlBuilder.ToString());
        }

        // should now return https
        Url.Link("RouteName", new { controller = "Controller", action = "Action" });
  

Комментарии:

1. Да, я надеялся, что в него встроено что-то более простое, но, похоже, оно не существует. Одна вещь, которая также должна была произойти, заключалась в том, что порт в UriBuilder должен был быть явно установлен, иначе он сохранял порт 80 и вызывал ошибку.

2. т.е. secureUrlBuilder.Port = 443;