2010-07-21 4 views
0

그래서 내 응용 프로그램에서 경로와 관련된 이상한 문제가 발생했습니다. 웬일인지 그것은 단지 일치하지 않을 것이다. {controller}/Comments/Put처럼 보이며, 올바른 컨트롤러 (여기서는 "Misc")에 있는지 확인하기 위해 해당 제약 조건이 있습니다. 내가 경로에 게시하면 그냥 일치하지 않습니다 ...MVC 2 경로 문제 (버그?)

RouteDebugger 라이브러리를 연결하고 "No Match!"라고 표시하지만 경로 테이블을 볼 때, "경기"열에 녹색 "참"이 표시되어 약간의 손실이 있습니다. 동시에 일치하거나 일치하지 않는 방법은 무엇입니까?

나는 응용 프로그램에 대한 다른 모든 경로를 주석으로 처리하고 있지만 여전히 동일한 결과를 얻었습니다.

내가 한 일은 내가 무언가 길게 바보로 길을 바꾸었을 때였지만 그때 나는 액션으로 게시 할 수 없다는 또 다른 오류가 발생했다. 그게 바로 [HttpPut]으로 장식 되었기 때문이었다. 게시물의 일부로 HttpMethodOverride를 가졌습니다. 어쨌든, 모든 버그에 대해 말할 수있는 또 다른 어리석은 버그입니다.

Idk이 경우 차이가 나면 안되지만 ... 호출해야하는 동작은 RedirectToRouteResult 동작입니다.

편집 : 그것은 여전히 ​​변화가 먼저 호출되지 얻을 그래서 나는 또한 목록의 맨 위에 경로를 넣어 시도했습니다 ...

어쨌든, 누군가가 날 지점 수 있다면 왜 경로 실패하고있다, 나는 정말로 그것을 바르게 평가할 것이다!

미리 감사드립니다.

EDIT 2 : 조금 더 명확히하기 위해 응용 프로그램은 기본적으로 짧은 메시지를 게시 한 다음 해당 메시지에 주석을 달기위한 것입니다.

메시지 게시는 과 일치하는 Ajax/Post/Put 경로의 Ajax 컨트롤러를 통해 정상적으로 작동합니다. 경로가 매우 유사하지만 서로 충돌하지는 않습니다. 각 경로는 controller = new ControllerConstraint("Ajax") 또는 controller = new ControllerConstraint("Misc") 형태의 컨트롤러 제약 조건을가집니다. EDIT 3

:

MiscController : BaseController { 
    [HttpPut, ValidateAntiForgeryToken] 
    public RedirectToRouteResult PutComment(
     [Bind(Prefix = "Comment", Include = "Text")] Comment Comment) { 
     // Do stuff... 
    } 
} 

Routes.MapRoute("Misc (Put Comment)", "{controller}/Comments/Put", new { 
    action = "PutComment" 
}, new { 
    controller = new ControllerConstraint("Misc") 
}); 

편집 : 4 :이를 하드 쓰기 여기에서 Global.asax에서 호출 할 필요가 컨트롤러/액션과 경로이다, 다시는 조금 명확히하기 위해 5

Routes.MapRoute("Misc (Put Comment)", "Misc/Comments/Put", new { 
    controller = "Misc", 
    action = "PutComment" 
}); 

편집 : 내가 겪었 및 경로의 모든 단순화했습니다하여 UR에서 더 이상 PARAMS 다음과 같이 경로는 효과가 없습니다 그리고 더 이상 제약이 없습니다. 따라서 경로는 다음과 같습니다.

경로가 완전히 하드 코딩되었으므로 경로가 일치하지 않아야합니다. 평범하고 단순한 ... 아니면 ... ...

시도해 본 후에, 나는 POST가 허용되지 않는다는 소리를 지르고있었습니다. 이것은 동작이 PUT으로 장식 되었기 때문에 사실 이었지만, Http 재정의 (override)가 있어야하는 것처럼 보냈지 만, 프레임 워크는 그것을 완전히 무시했습니다 (?).

그래서 나는 똑같은 게시물 시도를 다시 시도하기로 결정했으나 이번에는 경로 디버거를 사용하여 다음과 같은 결과를 얻었습니다. 경로가 아직 일치하지 않습니다. 경로 테이블에서 여전히 일치하는 것으로 표시됩니다. . CONTRADICTIONS a the ** ** !!!

그래서 다른 BS 오류를 삼키기 위해 모든 다른 모든 방법뿐만 아니라 다른 모든 경로를 사용하지 않기로 결정했습니다.

맞춰봐, 나는 여전히 같은 결과를 얻었다. 마치 프레임 워크가 완벽하게 움직이는 것처럼입니다 ...

나는 매우 좌절감을 느낍니다. 나는이 간단한 포스트/코멘트 응용 프로그램보다 훨씬 더 복잡 응용 프로그램을 작성했습니다 나는 ... 가

난 그냥 더 이상 모르는 ... 너무 많은 어려움에

를 실행 한 적이 :: 간다 모퉁이에 머리가 으르면서 울기 시작합니다. ::

+0

경로를 추가 한 방법에 대한 자세한 정보를 제공 할 수 있다면 도움이 될 것입니다. 'Misc/Comments/Put'라고 부르거나'{controller}/Comments/Put'을 경로 매핑 사전에 넣었습니까? 그렇다면 경로 표에서 경로를 파기하는 방법에 대해 자세히 설명해주십시오. –

+0

나는'/ Misc/Comments/Put '을'/ {controller}/Comments/Put'과'ControllerConstraint ("Misc")'와 일치해야하는 폼 포스트를 통해 호출하고 있습니다. 그렇지 않습니다. 또 다른 유사한 경로'/ Ajax/Posts/Put'도 잘 동작하며'ControllerConstraint ("Ajax")'도 있습니다. 그래서 충돌하는 방식은 없습니다. 희망이 조금 더 도움이됩니다. – Gup3rSuR4c

답변

0

좋아요, 알았어.

첫 번째 실수는 데이터베이스에서 오는 오류를 억제하고 있다는 점입니다. 작업이 호출되었지만 데이터베이스 오류가 발생하지 않았으므로 데이터가 변경된 것을 본 적이 없기 때문에 조치가 호출되지 않았다고 가정합니다.

내가 실수로 리디렉션하지 않은 두 번째 실수 또는 구체적으로 리디렉션을위한 컨트롤러를 지정하지 않았습니다. 같은 리다이렉트가 동일한 컨트롤러 내에 존재하지 않는 액션으로 리디렉션하려고 시도했다.

그러나 나는 이것이 모순 된 점을 감안할 때 HttpVerb 예외를 두 번 가져옵니다. 원래 작업을 호출 한 다음 기존 작업으로 리디렉션한다고 가정 할 수 있지만 리디렉션은 HttpVerb를 유지하므로 두 번째 작업에서 예외가 발생합니다. 그러나 이것은 여전히 ​​잘못되었을 가능성이있는 학사 설명처럼 보이지만, 내가 그것을 이해할 수있는 가장 좋은 방법입니다.

마지막으로 컨트롤러 A에 대한 경로가 구성되었지만 실제로 컨트롤러 B에있는 경우 "처리"를 처리하는 것처럼 보이지만 실패한 것으로 나타났습니다. 즉, 실제로는 그렇지 않을 때 행동을 취하고 있다고 생각하도록 오도됩니다.

어쨌든 앞으로 도움이되기를 바랍니다.