Tôi có một hình thức mà tôi sử dụng ckeditor. Biểu mẫu này hoạt động tốt ở Asp.Net 2.0 và 3.5 nhưng hiện tại nó không hoạt động trong Asp.Net 4+. Tôi có chỉ thị ValidateRequest = "false". Bất kỳ đề xuất?
Tôi có một hình thức mà tôi sử dụng ckeditor. Biểu mẫu này hoạt động tốt ở Asp.Net 2.0 và 3.5 nhưng hiện tại nó không hoạt động trong Asp.Net 4+. Tôi có chỉ thị ValidateRequest = "false". Bất kỳ đề xuất?
Câu trả lời:
Tìm thấy giải pháp tại trang lỗi. Chỉ cần thêm requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Thông tin MSDN: Thuộc tính httpR.78Section.RequestValidationMode
Có một cách để biến xác nhận trở lại 2.0 cho một trang. Chỉ cần thêm mã dưới đây vào web.config:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Tôi biết đây là một câu hỏi cũ, nhưng nếu bạn gặp phải vấn đề này trong MVC 3 thì bạn có thể trang trí ActionMethod
với [ValidateInput(false)]
và chỉ cần tắt xác thực yêu cầu cho một lần duy nhất ActionMethod
, rất tiện lợi. Và bạn không cần thực hiện bất kỳ thay đổi nào đối với web.config
tệp, vì vậy bạn vẫn có thể sử dụng xác thực yêu cầu .NET 4 ở mọi nơi khác.
ví dụ
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Điều này hoạt động mà không thay đổi chế độ xác nhận.
Bạn phải sử dụng một System.Web.Helpers.Validation.Unvalidated
người trợ giúp từ System.Web.WebPages.dll
. Nó sẽ trả về một UnvalidatedRequestValues
đối tượng cho phép truy cập vào biểu mẫu và QueryString mà không cần xác thực.
Ví dụ,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Hoạt động với tôi cho MVC3 và .NET 4.
Lưu ý rằng một cách tiếp cận khác là tuân thủ hành vi xác thực 4.0, nhưng để xác định lớp của riêng bạn xuất phát từ RequestValidator
và đặt:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(nơi nào YourNamespace.YourValidator
tốt, bạn sẽ có thể đoán ...)
Bằng cách này, bạn giữ được những lợi thế của hành vi 4.0 (cụ thể là việc xác thực xảy ra sớm hơn trong quá trình xử lý), đồng thời cho phép các yêu cầu bạn cần thực hiện, thông qua.