Przejdź do treści

DevStyle - Strona Główna
AbsolutePageUrl
Backend

Problem wydaje się banalny i głupi. Jeżeli istnieje jego proste rozwiązanie to znaczy że JA jestem głupi. I banalny.

Chodzi o wygenerowanie w zwykłej własnej klasie linka do jakiejś strony w naszej witrynie. Nie po stronie aspx, nie w kontrolerze… po prostu GDZIEŚ.

Przez długi czas działała taka konstrukcja: HttpContext.Current.Request.ApplicationPath + “/MyPage/”. Jednak jak to bywa, okazało się że nie jest ona idealna. Wystarczyło skonfigurować aplikację tak, aby była domyślną WebSite serwowaną przez IIS (czyli np. dostępna pod adresem http://localhost) i pojawiły się problemy – przedstawione instrukcje zwracały adres http://MyPage, a czegoś takiego oczywiście nie ma (a nawet jeśli przypadkiem jest, to nie o to nam chodzi:) ).

Po dość długiej randce z Googlem (który nie okazał się zbyt pomocny) i Reflectorem (szczególnie skupiłem się na metodzie Response.Redirect()) powstała taka metoda:

  1:  public static string CreateAbsolutePageUrl(string virtualUrl)
  2:  {
  3:  	return new Uri(
  4:  		HttpContext.Current.Request.Url,
  5:  		HttpContext.Current.Response.ApplyAppPathModifier(virtualUrl)
  6:  	).AbsoluteUri;
  7:  }

Ma ktoś pomysł jak to inaczej osiągnąć poprawne w każdej sytuacji generowanie absolutnych adresów z np. takiego stringa: “~/MyPage”?

Zobacz również