[asp.net] ValidateRequest =“false”가 Asp.Net 4에서 작동하지 않습니다

ckeditor를 사용하는 양식이 있습니다. 이 형식은 Asp.Net 2.0 및 3.5에서 제대로 작동했지만 이제 Asp.Net 4 이상에서는 작동하지 않습니다. ValidateRequest = “false”지시문이 있습니다. 어떤 제안?



답변

오류 페이지에서 해결책을 찾았습니다. requestValidationMode = “2.0”을 추가해야합니다.

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime requestValidationMode="2.0" />
</system.web>

MSDN 정보 : HttpRuntimeSection.RequestValidationMode 속성


답변

한 페이지에 대해 유효성 검사를 2.0으로 다시 설정하는 방법이 있습니다. 아래 코드를 web.config에 추가하십시오.

<configuration>
    <location path="XX/YY">
        <system.web>
            <httpRuntime requestValidationMode="2.0" />
        </system.web>
    </location>

    ...
    the rest of your configuration
    ...

</configuration>


답변

나는 이것이 오래된 질문이라는 것을 알고 있지만 MVC 3 에서이 문제가 발생하면 ActionMethodwith를 장식 [ValidateInput(false)]하고 단일 요청 유효성 검사를 끌 수 있습니다 ActionMethod. 또한 web.config파일을 변경할 필요가 없으므로 다른 곳에서도 .NET 4 요청 유효성 검사를 계속 사용할 수 있습니다.

예 :

[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
    // Do your own checking of value since it could contain XSS stuff!
    return View();
}


답변

이것은 유효성 검사 모드를 변경하지 않고 작동합니다.

System.Web.Helpers.Validation.Unvalidated도우미 를 사용해야합니다 System.Web.WebPages.dll. UnvalidatedRequestValues유효성 검사없이 폼과 QueryString에 액세스 할 수 있는 객체 를 반환합니다 .

예를 들어

var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));

MVC3 및 .NET 4에서 작동합니다.


답변

또 다른 접근 방식은 4.0 유효성 검사 동작을 유지하지만 파생 RequestValidator하고 설정 하는 자체 클래스를 정의하는 것 입니다.

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

( YourNamespace.YourValidator잘, 당신은 추측 할 수 있어야한다 …)

이렇게하면 4.0s 동작 (특히 유효성 검사가 처리 초기에 발생 함)의 이점을 유지하면서 통과해야하는 요청도 허용 할 수 있습니다.


답변