2011-01-31 2 views
3

매개 변수와 URL 사이에 % 20 문자가 표시되면 내 MVC 라우팅이 해당 문자열을 고려하지 않습니다.% 20 다음에 슬래시를 추가하여 데이터를 추가하면 ASP.NET MVC 3 라우팅이 실패합니까?

왜 그런가요? 내 URL에서 "% 20"문자 처리 방법에 어떻게 접근 할 수 있습니까?

예 URL은

http://localhost:40494/ListContents/Delete/asdf%20/5430f394... 

public ActionResult Delete(string DNSName, Guid id) 
{...} 

routes.MapRoute(
    "Delete", // Route name 
    "ListContents/Delete/{DNSName}/{id}", // URL with parameters 
    new { controller = "ListContents", action = "Delete" } // Parameter defaults 
    ); 

그러나는 모두 다음 URL은

http://localhost:40494/ListContents/Delete/asdf%20SOMETHING_HERE/5430f394... 

http://localhost:40494/ListContents/Delete/%20asdf/5430f394-946c-4f82-ac13-9d5efafe9127 

답변

3

빈 슬래시가 URL의 섹션 끝에 있으면 다음 슬래시 전에 System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath() 메서드에서 HttpException을 던집니다.이 메서드는 MVC에서 처리하며 HTTP 404 응답을받습니다. 당신이 빈 공간이 없어야합니다 일반적으로

  1. Visual Studio
  2. Debug
  3. Exceptions
  4. Common Language Runtime Exceptions

:

당신은에 Throw의 확인란을 선택하여 직접 확인할 수 있습니다 귀하의 URL. 나는 개인적으로 모든 URL이 대시 (-)가되도록 내 URL의 형식을 지정합니다.

+0

이것이 디버깅해야 할 것과 똑같은지 ... 내가 가진 공간이 두 번째 매개 변수의 백 슬래시보다 먼저 나오는지 확인해야합니다. – LamonteCristo

+0

슬래시 앞에 빈 공간이있는 URL의 모든 섹션에서 발생하는 것을 분명히하기 위해 약간 대답을 변경했습니다. –

+0

흥미 롭습니다. MVC의 실제 경로를 다루지 않기 때문에 데이터베이스의 변수 만 유효하거나 유용한 검사입니까? XSS 확인이 여기에서 더 효과적 일 수 있습니다. – LamonteCristo

0

나는 문제가 예에서 어디 작동하지 않는 것을 생각 잘 작동 '가 수 있기 때문에 유효한 URL로 구문 분석되면

http://localhost:40494/ListContents/Delete/asdf /5430f394...

대신 안전하게 해당 URL에서 %20을 제거하면 안전합니다.

+0

다른 페이지에서'HTML.ActionLink'에 의해 자동 생성되기 때문에 그 공간이 있습니다. 공간은 백업 데이터베이스에서옵니다. 이것이 내 페이지의 나머지 부분에서 발생하지 않도록하는 가장 좋은 방법은 무엇입니까? – LamonteCristo

+0

@ makerofthings7 : URL 문자열을 검색하고 '% 20' 전후에'/'가 없는지 확인하십시오. 이것은 단지 추측입니다. 나는 그 순간 더 나은 길을 확신하지 못한다. – VoodooChild

0

테이블의 id 필드가 문자열 (nchar (x))이 아닌지 확인하십시오. 그렇다면 해당 id가 유형 선언에 정의 된 길이와 정확히 일치하는지 확인하십시오. 그렇지 않은 경우 (문자 수가 적 으면) 문제가됩니다 (사용자가 선언 한 길이만큼 짧아야 함). 이것은 나를 위해 일했다.

관련 문제