2014-06-16 7 views
8

Devo generare un URL assoluto a un'API Web ASP.NET per un callback/reindirizzamento successivo.Generare il collegamento HTTPS nell'API Web utilizzando Url.Link

Il collegamento possono essere generati utilizzando

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

Ciò restituisce l'URL corretto, però, ho bisogno di essere sempre https. Url.Link sembra generare un url usando lo schema della richiesta corrente. Ad esempio, se la richiesta che genera l'url è qualcosa come http://www.myhost.com/controller/generateUrl allora Url.Link genera un URL http. Se la richiesta che genera l'url è https://www.myhost.com/controller/generateUrl, quindi Url.Link genera un URL https.

L'URL deve sempre essere generato utilizzando https. Esiste un parametro o un valore di percorso che può essere passato a Url.Link per raggiungere questo obiettivo?

Grazie.

risposta

10

Non sembra possibile con Url.Link()

Vorrei verificare la HttpRequest e modificarlo a https per ottenere tutti Url.Link() per restituire un collegamento https.

Qualcosa di simile:

 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

Sì, ero lì speravo fosse qualcosa di più semplice costruzione, ma non sembra che esista. Una cosa che doveva anche accadere era che la Porta su UriBuilder doveva essere impostata in modo esplicito, altrimenti manteneva la porta 80 e provocava un errore. – Chrisgh

+1

, ad esempio 'secureUrlBuilder.Port = 443;' – KCD

Problemi correlati