서버 측 오류는 Post/Redirect/Get 패턴에서 어떻게 처리됩니까?

StackOverflow https://stackoverflow.com/questions/599086

  •  11-09-2019
  •  | 
  •  

문제

성공적인 사용 사례의 경우 Post/Redirect/Get (PRG) 작업 흐름은 매우 간단합니다. 간단히 리디렉션 (클라이언트 측)이 원하는 페이지로 리디렉션하십시오. 그러나 서버 측 유효성 검사 중에 오류가 발생하는 경우는 어떻습니까? 입력 페이지를 다시 표시 할 때 입력을 보존하려고합니다.

내가 알 수있는 한, 두 가지 접근 방식이 있습니다. 오류 중에 양식 작성 후 입력 페이지를 다시 렌더링합니다 (즉, PRG 패턴을 무시하는 동안). 또는 입력 페이지로 리디렉션하고 렌더링 중에 나중에 검색 할 수있는 어딘가에 이전 입력을 저장하십시오. 둘 다 단점이 있습니다. 첫 번째로, 우리는 PRG 패턴이 피하는 데 도움이되는 문제가 있습니다 (예 : 북마크 가능성, 이중 제출). 두 번째 접근법은 일관성이없는 혜택으로 이어집니다 (첫 번째 Get은 저장된 입력을 발견하고 후속 Gets는 그렇지 않을 수 있습니다). 여기에 언급 된 것들에 대한 다른 대안이 있습니까? 이 사례가 가장 잘 처리되는 방법에 대한 커뮤니티의 의견을 바라고 있습니다.

도움이 되었습니까?

해결책

나는 일반적으로 당신이 설명하는 첫 번째 방법입니다. 성공적인 제출시 저장. 유효하지 않은 데이터를 포함하는 양식을 북마크하는 데 필요한 실제 사용 사례를보기는 어렵습니다. 반면에 확인 페이지를 북마크하는 것이 종종 의미가 있습니다 (성공적인 제출 후).

다른 팁

양식을 작성하는 데 사용되는 URL이 양식 게시물 인 경우 문제가 있다고 생각하지 않습니다. 입력이 유효 한 경우 리디렉션하고 얻습니다. 유효하지 않은 경우 채워진 양식을 REDISPLATE하십시오. 이런 식으로 상호 작용은 다음과 같습니다.

GET  /your-url => blank form
POST /your-url (success) => Redirect => GET /success-url
POST /your-url (failure) => filled-in form

언급 된 북마크 가능성 문제는 두 가지 접근 방식에 영향을 미치며 서버에 보존 된 일부 임시 데이터에 의존하는 것을 실제로 북마크 할 수는 없습니다.

또한 유효성 검사가 실패하면 데이터를 저장하지 않으면 이중 배출은 실제로 문제가되지 않습니다 (즉, 실패한 데이터가있는 모든 제출은 idempotent 요청입니다).

따라서 성공에 대한 PRG는 매우 깨끗한 접근 방식입니다.

다른 답변과 마찬가지로, 성공적인 서버 측 유효성 검사에서 Post/Redirect/Get 패턴 만 사용하십시오. 양식이 유효하지 않은 경우 오류 메시지와 함께 응답에 직접 응답하십시오.

유용성을 위해, 당신은 그것을 확인해야합니다 클라이언트 측 유효성 검사가 우수합니다, 사용자가 즉각적인 피드백을 좋아하기 때문에 이것은 어쨌든 좋은 생각입니다. JavaScript 또는 The를 사용하십시오 새로운 HTML5 형태 기능, 와 같은 required 속성 또는 maxlength 속성 또는 type="email" 속성 등.

물론, 서버 측 유효성 검사가 있어야합니다 보안 및 우아한 열화를 위해.

ASP.NET MVC를 사용하는 경우 게시물 -> 실패 상황에 사용할 수있는 다른 방법이 있습니다. 이 기사의 #13에서 다루어집니다. ASP.NET MVC 모범 사례 (1 부).

해당 메소드를 구현하면 가능합니다 언제나 게시물이 실패한 경우에도 게시물 후 리디렉션됩니다.

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