문제

asp.net mvc의 미리 보기 5를 사용하는 샘플 라우팅에 문제가 있습니다.

AccountController에는 두 가지 작업이 있습니다.

public ActionResult Delete()  
public ActionResult Delete(string username)

Account/Delete 또는 Account/Delete?username=davide를 찾으려고 시도하는 동안 ControllerActionInvoker에서 견인 작업 메서드 간에 삭제 요청이 모호하다는 예외가 발생합니다.

global.asax의 기본 경로는 변경되지 않았습니다.

액션 호출자는 매개변수 목록을 보고 호출하는 메서드가 무엇인지 이해해야 하지 않나요?

Preview 4를 사용하면 동일한 작업을 수행하는 데 이러한 종류의 문제가 발생하지 않았습니다.

어떤 아이디어?

도움이 되었습니까?

해결책

해결책을 찾았습니다!

ActionNameAttribute가 도입되면서 이제 요청에 따라 호출할 메서드를 수동으로 필터링해야 합니다.이는 ActionSelectionAttribute에 의해 수행됩니다.

여기에 전체 설명이 있습니다: http://haacked.com/archive/2008/08/29/how-a-method-becomes-an-action.aspx

다른 팁

왜 이런 일이 일어나는지 확실히 말할 수 없습니다.그러나 삭제(문자열 사용자 이름) 작업만 사용하고 매개 변수가 없는 오버로드를 제거하는 것을 고려할 수도 있습니다.

문자열은 null을 허용하기 때문에 간단히 Account/Delete를 호출하면 작업 메서드 시작 부분에서 테스트할 수 있는 null 사용자 이름 매개 변수를 사용하여 작업이 호출된다는 것을 이해했습니다.

내가 할 일은 빈 삭제()를 버리고 삭제(문자열 사용자 이름)만 사용하는 것입니다.

URL 라우팅에 "/{Controller}/{Action}/{username}/" 과 유사한 내용이 있습니까?"/{Controller}/{Action}/{Id}/"가 있는 경우 삭제(문자열 ID)를 수행하는 것이 더 좋으며 URL을 사용하여 이 "/Account/Delete/davide/"를 처리하는 것이 좋습니다.

기본 ID는 ""와 같은 기본 경로를 사용한다고 말했습니다.

그런 다음 삭제(문자열 ID) 메소드에 다음이 포함됩니다.

public ActionResult Delete(string id)
{
    if(string.IsNullOrEmpty(id)) return EmptyID();

    // Continue normal Delete method
}

public ActionResult EmptyID()
{
    // The method you were going to have on a blank delete.
}

아니면 if {} else {}의 한 메서드로 마무리하세요.

어느 쪽이든 나는 단지 하나의 방법을 사용하고 빈 문자열의 경로에서 사용자 이름/ID에 대한 기본값을 수행하고 그런 식으로 처리할 것입니다.

제가 의미하는 바에 대한 추가 후속 조치나 도움이 될 내용에 대해 저에게 연락하고 싶으시면 내 정보 페이지의 andrew@ 내 도메인으로 저에게 핑을 보내주세요.

편집하다:아 어쨌든 Berko가 말한 것과 거의 같습니다. 명명된 속성이 어떻게 도움이 될지 잘 모르겠습니다. 따라서 동일한 문제를 발견한 다른 사용자를 위해 여기에 자세히 설명하는 의견을 게시해 주세요!:)

두 컨트롤러 작업이 동일한 게시 방법이기 때문에 모호합니다.예를 들어 HTTP 게시를 사용하는 양식 데이터를 제출하는 경우 양식 게시 시나리오에서만 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top