2010-12-31 4 views
5

내 웹 사이트 URL에 별표 (*)를 허용하는 데 문제가 있습니다. ASP.NET MVC 2 및 .NET 4.0을 실행하고 있습니다. 여기 URL에 별표 허용

문제에 대해 설명 예입니다 :

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

사용자 이름 니스 *입니다 및 ASP.NET은 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. 

가 다음과 같이 온라인에서 본 모든 Web.config 메서드 :

<pages validateRequest="false"> 

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

제 질문은 URL에 별표를 사용할 수 있습니까? 그렇지 않은 경우 별표 (*)를 인코딩 할 수있는 .NET의 인코딩 방법이 있습니까?

감사합니다.

+0

HTTP 인코딩 규칙을 이해하고 있습니까? 그렇지 않다면 거기에서 시작하십시오. – JasonTrue

+0

별표는 예약 된 문자이므로 HTTP 인코딩의 일부가 아닙니다. 그러나 그것은 해결책이 있는지 내 질문에 대답하지 않습니다. – raRaRa

+0

당신은 당신 자신의 질문에 대답했습니다. W3의 예약 문자입니다. 당신이 그 일을 해결할 수 있다면 그것은 아주 예비 적이 지 않을 것입니다. –

답변

2

제 해결책은 쿼리 문자열로 변경하는 것입니다.

예컨대 :

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

그냥 잘 작동하는 것 같다 그런 식으로.

별표 (*)는 예약 된 문자이므로 사용자 이름에도 허용하지 않아야합니다. 그러나 이것은 나의 문제를 해결합니다.

5

별표 (*)는 특별한 의미가있는 예약 된 문자이므로 URI에서 잘못 사용하면 안됩니다. 대신 URI에 삽입하기 전에 percent encode 각 사용자 이름을 입력해야합니다.

인코딩 비율에서 별표 문자는 "% 2A"가됩니다.

그래서 전체, 올바른 URI는 다음과 같습니다 http://example.com/profile/view/Nice%2A

퍼센트 인코딩 이름이 자동으로 다시 원래 이름 문자열로 변환해야합니다.

이렇게하면 사용자가이 주소를 복사하여 메일 프로그램에 붙여 넣을 때 URI가 서버 쪽뿐만 아니라 클라이언트 쪽의 유효성을 확인할 수 있습니다.

예를 들어 Stack Overflow는 안전하고 인코딩 된 퍼센트 퍼센트의 URI를 자동으로 하이퍼 링크합니다 : http : // example. HTTP : // example.com/profile/?user=username*

별표가에 포함되지 않은 COM/프로필 /보기/니스 %의 2A

그러나 그것은 완전히 안전하지 않은 버전을 하이퍼 링크되지 않습니다 스택 오버플로 링크 - 그래서 사용자가 잘못된 페이지를 종료했을 것입니다.

(죄송합니다 나는 이것을 설명 할 수없는 - 미안 단지 내 게시물에 포함 된 두 개의 링크를 허용했다.) 당신이 그것을 삽입하기 전에

당신은 항상 %의 데이터를 인코딩하여 자신에게 문제의 큰 거래를 절약 할 수 있습니다 URI로 변환합니다.

+0

.NET에서이 작업을 수행하는 데 일반적으로 사용되는 방법은 UrlEncode입니다. http://msdn.microsoft.com/en-us/library/zttxte6w.aspx – AaronSieb