2014-06-16 15 views
8

Potrzebuję wygenerować bezwzględny adres URL do interfejsu API środowiska ASP.NET Web w celu późniejszego wywołania/przekierowania.Generowanie łącza HTTPS w interfejsie API sieci Web przy użyciu Url.Link

Link mogą być generowane przy użyciu

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

ta zwraca prawidłowy adres URL, jednak muszę go zawsze https. Url.Link wydaje się generować adres URL za pomocą schematu bieżącego żądania. Na przykład jeśli żądanie generujące adres URL jest takie, jak http://www.myhost.com/controller/generateUrl, Url.Link generuje adres URL http. Jeśli żądanie generujące adres URL to https://www.myhost.com/controller/generateUrl, Url.Link generuje adres URL https.

Adres URL należy zawsze generować przy użyciu protokołu HTTPS. Czy istnieje parametr lub wartość trasy, którą można przekazać do Url.Link, aby to osiągnąć?

Dzięki.

Odpowiedz

10

Nie wydaje się możliwe Url.Link()

chciałbym sprawdzić HttpRequest i zmienić go na https, aby uzyskać wszystkie Url.Link() wrócić łącza HTTPS.

Coś jak:

 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" }); 
+2

Tak, miałem nadzieję, że coś prostsze wbudowany ale nie wygląda to istnieje. Jedną z rzeczy, która musiała się stać, było to, że Port na UriBuilderze musiał być jawnie ustawiony, w przeciwnym razie utrzymywał port 80 i powodował błąd. – Chrisgh

+1

tj. 'SecureUrlBuilder.Port = 443;' – KCD

Powiązane problemy