2010-04-07 7 views
4

이 잘 작동 :콜론이 포함 된 GET 요청을 ASP.NET MVC2 컨트롤러로 보내려면 어떻게해야합니까?

GET /mvc/Movies/TitleIncludes/Lara%20Croft 

나는 다음과 같이 콜론이 포함 된 요청을 제출하는 경우 :

GET /mvc/Movies/TitleIncludes/Lara%20Croft:%20Tomb 

이 ... 그것은 400 오류가 발생합니다. 오류 ASP.NET에서 URL에 잘못된 문자가 감지되었습니다.

GET /mvc/Movies/TitleIncludes/Lara%20Croft%3A%20Tomb 

을 ... 그리고 이것은 또한 나에게 400 오류를 제공합니다 : 나는 URL 이스케이프를 시도 할 경우

는 요청은 다음과 같습니다.

콜론을 | :

GET /mvc/Movies/TitleIncludes/Lara%20Croft|%20Tomb 

또한이 오류는 500 회 오류로 처리되었습니다. 메시지 : 경로에 잘못된 문자가 있습니다.

URL 이스케이프 처리 | 동일한 오류가 발생합니다.


저는 정말로 querystring 매개 변수를 사용하고 싶지 않습니다.


관련 : Sending URLs/paths to ASP.NET MVC controller actions

답변

3


은 그 URL 인코딩이 작동하지 않았다 찾았지만, 사용자 정의 인코딩했다.
파일 시스템에서 합법적이지 않은 URL의 문자로 인해 500 또는 400 오류가 발생하기 때문에 ASPNET MVC가 파일 시스템을 사용하여 구문 분석 및 라우팅을 수행합니다.

그래서 나는 JavaScript에서 유니 코드 ¡ 문자로 콜론을 대체 한 다음 동작에 반대를 수행했습니다.

브라우저 :이 같은 조치에

function myEscape(s){ 
    return s.replace(':', '%C2%A1').trim(); 
} 

인수를 사용하기 전에이 변환을 호출

private string MyCustomUnescape(string arg) 
{ 
    return arg.Replace("¡", ":"); 
} 

같은 접근 방식은 슬래시 작동 - 단지 다른 유니 코드 문자를 선택하십시오. 물론 문자열 인수 자체가 유니 코드이면 "인코딩 된"형식에 인쇄 할 수없는 문자를 사용해야합니다.

1

SEO가 문제가 아닌 경우 base64를 사용하고 urlencode 할 수 있습니다. 첫 번째 단계가 끝나면 모든 캐릭터를 쉽게 인코딩 할 수 있습니다. .NET의 디코딩은 System.Web.HttpUtility 및 System.Convert에서 도우미를 사용하는 것만 큼 쉽습니다. 유사

0

여기에 대답 https://stackoverflow.com/a/12037000/134761

사용 물음표와 인수 및 URL 인코딩 인수에 대한 앰퍼샌드.

예 : GET/mvc/Movies/TitleIncludes?제목 = 라라 % 20 크로프트 % 3A % 20Tomb

URL에 내용을 인코딩하는 것이 좋겠지 만 동의하지 않는 것이 좋습니다.

관련 문제