2010-12-31 7 views
5

Mam problem z zaznaczeniem gwiazdki (*) w adresie URL mojej witryny. Używam ASP.NET MVC 2 i .NET 4.0.Pozwolenie na gwiazdkę w adresie URL

Oto przykład, który opisuje problem:

http://mysite.com/profile/view/Nice *

nazwa użytkownika jest ładny * i ASP.NET mówi, że są nielegalne znaki w adresie URL:

Illegal characters in path. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentException: Illegal characters in path. 

próbowałem wszystkie metody Web.config, które widziałem w Internecie, takie jak:

<pages validateRequest="false"> 

i

<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" /> 

Moje pytanie brzmi: czy można zezwolić na gwiazdkę w adresie URL? Jeśli nie, czy jest jakiś sposób kodowania w .NET, który może kodować gwiazdkę (*)?

Dzięki!

+0

Czy znasz zasady kodowania HTTP? Jeśli nie, zacznij tam. – JasonTrue

+0

Wygląda na to, że gwiazdka nie jest częścią kodowania HTTP, ponieważ jest zarezerwowana. Ale nie odpowiada na moje pytanie, czy istnieje rozwiązanie. – raRaRa

+0

Odpowiedziałeś na własne pytanie. Jest to zarezerwowana postać przez W3. Nie byłby zbyt powściągliwy, gdybyś mógł obejść to. –

Odpowiedz

2

Moim rozwiązaniem było zmienić je na ciąg zapytania.

Np .:

http://mysite.com/profile/?user=username *

ten sposób wydaje się działać dobrze.

Wiem, że gwiazdka (*) jest zastrzeżoną postacią, dlatego nie powinienem pozwolić, aby nazwa użytkownika była dostępna. Ale to rozwiązuje mój problem.

5

Gwiazdka (*) jest zastrzeżoną literą o specjalnym znaczeniu, więc nie powinna być używana niepoprawnie w identyfikatorach URI. Zamiast tego należy podać jedną nazwę użytkownika przed jej wstawieniem do identyfikatora URI.

W ramach kodowania procentowego gwiazdka staje się "% 2A".

więc kompletne, poprawne URI byłoby: http://example.com/profile/view/Nice%2A

Procent kodowanie nazwa powinna być automatycznie tłumaczone z powrotem do oryginalnego napisu nazwę użytkownika dla ciebie.

Umożliwi to nie tylko identyfikację URI po stronie serwera, ale także po stronie klienta, gdy użytkownicy będą kopiować i wklejać te adresy do swoich programów pocztowych.

Na przykład Stack Overflow automatycznie tworzy hiperłącza bezpiecznego, procentowo zakodowanego identyfikatora URI: http: // example.com/profile/view/Nicea% 2A

Ale to nie w pełni hiperłącze z niebezpieczną wersję: http: // example.com/profile/?user=username*

Gwiazdka nie jest zawarty w łącze przepełnienia stosu - aby Twój użytkownik znalazł się na niewłaściwej stronie.

(Niestety nie mogę wykazać to - jestem dozwolony tylko do dwóch linków zawartych w moim poście.)

można zaoszczędzić wiele kłopotów, zawsze kodowania danych procent przed włożeniem go do URI.

+0

Metodą używaną zwykle do wykonywania tej czynności w .NET jest UrlEncode: http://msdn.microsoft.com/en-us/library/zttxte6w.aspx – AaronSieb