[asp.net-mvc-4] 필수 위조 방지 양식 필드 “__RequestVerificationToken”이 없습니다. 사용자 등록 오류

Membership.create사용자 기능을 사용 하고 있는데 다음 오류가 발생합니다.

필수 위조 방지 양식 필드 “__RequestVerificationToken”이 없습니다.

이 문제를 어떻게 해결할 수 있습니까?



답변

당신은 [ValidateAntiForgeryToken]행동하기 전에 속성이 있습니다. 또한 @Html.AntiForgeryToken()양식에 추가해야합니다 .


답변

필자의 경우 web.config 에이 기능이 있습니다.

<httpCookies requireSSL="true" />

그러나 내 프로젝트는 SSL을 사용하지 않도록 설정되었습니다. 해당 라인을 주석 처리하거나 항상 SSL을 사용하도록 프로젝트를 설정하면 해결되었습니다.


답변

이처럼 :

컨트롤러

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult MethodName(FormCollection formCollection)
{
     ...
     Code Block
     ...
}

보기:

@using(Html.BeginForm())
{
     @Html.AntiForgeryToken()
     <input name="..." type="text" />
     // rest
}


답변

또한 [HttpGet] 아래의 [ValidateAntiForgeryToken]을 사용하지 마십시오.

  [HttpGet]
  public ActionResult MethodName()
  {
  ..
  }


답변

쿠키가 활성화되지 않은 경우에도 오류가 발생합니다.


답변

이 문제를 일으킬 수있는 또 다른 것은 다음과 같습니다. 어떤 이유로 든 양식에서 모든 입력 필드를 비활성화하십시오. 확인 토큰을 보유한 숨겨진 입력 필드를 비활성화합니다. 양식이 다시 게시되면 토큰 값이 누락되고 누락 된 오류가 생성됩니다. 따라서 확인 토큰을 보유한 입력 필드를 다시 활성화하면 모든 것이 잘됩니다.


답변

요청의 일부로 파일을 업로드하는 사람들에게 또 다른 가능성. 콘텐츠 길이가 초과 <httpRuntime maxRequestLength="size in kilo bytes" /> 하고 요청 확인 토큰을 사용하는 경우 브라우저는 'The required anti-forgery form field "__RequestVerificationToken" is not present'요청 길이 초과 메시지 대신 메시지를 표시합니다 .

maxRequestLength를 요청에 맞게 충분히 큰 값으로 설정하면 즉각적인 문제가 해결되지만 적절한 해결책이 아니라는 것을 인정할 것입니다 (사용자는 요청 확인 토큰이 아닌 파일 크기의 실제 문제를 사용자가 알기를 원합니다).