#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;