2013-09-03 5 views
0

나는 두 개의 루트 그때기본값

[HttpGet] 
    public string Text(string text = null) 
    { 
    } 

와 컨트롤러를 만들고 /int/sandpit2/text?text=xxx로 호출 할 수 있습니다

 config.Routes.MapHttpRoute(
      "1", "int/{controller}/{Id}", 
      new { action = "GetById" }); 

     config.Routes.MapHttpRoute(
      "The rest", "int/{controller}/{action}", 
      defaults: new { action = "Get" }); 

생각

을 만들었지 만 나는 "아니오 조치 (404)를 받고 있어요 'GetById'라는 이름과 일치하는 컨트롤러 'Sandpit2'에서 발견되었습니다. "

어떻게 든 GetById을 호출하는 첫 번째 규칙을 가질 수 있지만 GetById 메서드가없는 경우 404s이 아닌 다른 경로가 일치합니까?

답변

0

귀하의 문제는 라우팅 3 별도의 단계에서 발생한다는 것입니다 : 일치하는 컨트롤러 내에서 일치하는 동작을 찾기 경로

  • 에 따라 일치하는 컨트롤러를 찾기 일치하는 경로
  • 찾기

    그래서 귀하의 경우, 첫 번째 경로는 URL을 한정하여 컨트롤러에 제공됩니다. 그런 다음 Id에 대해 일치하는 매개 변수를 찾을 수 없으므로 일치하는 작업을 찾을 수 없습니다. 변경하면 다음과 같이 작동합니다.

    [HttpGet] 
    public string Text(string id = null) 
    { 
        ... 
    }