2010-11-30 1 views
12

이유는 IIS가 Bin, App_Data, App_Code 등의 특정 ASP.NET 폴더를 보호하기 때문입니다. URL이 실제 파일 시스템 폴더에 매핑되지 않더라도 IIS는 언급 된 이름 중 하나와 동일한 경로 세그먼트가있는 URL을 거부합니다.ASP.NET 라우팅 : 토큰 사이의 리터럴 하위 세그먼트 및 리터럴 하위 세그먼트의 문자가있는 경로 값

{controller}/{action}/{id} 

... ID가 들어있는 문자열이 될 수 있습니다 :

이 내가이 같은 경로를 가질 수 없습니다 의미

Catalog/Product/Bin 

그래서, 대신에이 보안 조치를 해제의 나는이 같은 아이디 전에 접미사를 사용하여 경로를 변경 기꺼이 :

{controller}/{action}_{id} // e.g. Catalog/Product_Bin 
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin 

그러나이 노선은 경우 작동하지 않습니다 id는 새로운 delimeter를 포함합니다.이 경우 _

// These URL won't work (I get 404 response) 
Catalog/Product_Bin_ 
Catalog/Product/_Bin_ 
Catalog/Product/__Bin 

왜? 모르겠어, 나에게 버그처럼 보인다. 어떻게이 경로가 작동하도록 할 수 있습니까? id는 어떤 문자열이 될 수 있습니까? ? *, :

+0

[UrlRewrite] (http://www.iis.net/download/URLRewrite)를 사용하여이 작업을 수행 할 수 있습니까? – R0MANARMY

+0

흥미롭게도 Catalog/Product/_bin_는 나를 위해 일했지만 Catalog/Product/__ Bin이 작동하지 않았습니다. 왜 그런지 개발자에게 확인하고 있습니다. 나는 그것이 또한 효과가 있다고 생각할 것이다. – Haacked

+0

**/0 {id} **와 같은 작업을 수행 할 때도 이와 같은 문제가 발생할 수 있습니다 ** 현재이 문제가 있으며 일부 ID가있는 것으로 보이지만 다른 ID가 아닌 것 같습니다 ... –

답변

7

그래,이 버그는 있습니다. 그러나이 시점에서 우리는 몇 가지 이유로 그 문제를 해결할 계획이 없습니다.

  • 변경 사항이며 이는 네.
  • 쉬운 해결 방법이 있습니다.

    {controller}/{action}/_{id} 
    

    그런 다음 ID 매개 변수는 밑줄 문자로 시작해야합니다 경로 제약 조건을 추가 :

은 당신이 할 수있는 밑줄이없는 URL을 변경할 수 있습니다.

그런 다음 동작 방법 내에서 id 매개 변수의 밑줄 접두사를 잘라냅니다. 당신이 원한다면 당신을 위해이 작업 필터를 작성할 수도 있습니다. 불편을 드려 죄송합니다.

+0

과 함께이 버그를 만났습니다. 내 ID의 * 첫 번째 문자가 리터럴 접두사와 동일한 경우에만 경로가 일치하지 않습니다. http://stackoverflow.com/questions/8711829/why-wont-this-route-match –

0

당신은 같은 디렉토리 나 파일 이름에 허용되지 않는 문자를 사용할 수 있습니다.>,,, "<을 |

0

을 ASP.NET MVC 사용하면 소스를 보면 그들이 경로 구분 기호 (/)에 대해 하드 코딩 된 값이 있고 내 지식을 변경할 수 없습니다.