2009-07-10 28 views
9

Tôi cố gắng để tắt Yêu cầu kiểm định cho tất cả các phương pháp hành động trong một bộ điều khiển bằng cách làm này:Tôi không thể tắt Yêu cầu kiểm định cho một ASP.NET MVC Controller

[ValidateInput(false)] 
public class MyController : Controller 
{ 
    ... 

Các tài liệu tham khảo Tôi đang sử dụng nói điều này là có thể và bảo tôi làm theo cách này, nhưng vì lý do nào đó nó không hoạt động.

Nếu tôi gửi bất kỳ html (thậm chí là một đơn giản <b> tag) thông qua một hộp văn bản, tôi nhận được lỗi:

A potentially dangerous Request.Form value was detected from the client (text=<b>").

Nó cũng không làm việc bằng cách gắn các thuộc tính đến một phương pháp cá nhân.

Làm cách nào để vô hiệu hóa yêu cầu xác thực cho bộ điều khiển?

EDIT

Tôi đang làm việc trong máy chủ thử nghiệm tích hợp VS2008.

+0

Dựa trên tất cả những thứ đó là không làm việc, bạn sẽ phải cung cấp chi tiết hơn rất nhiều. Bạn đang chạy trong IIS, hoặc Cassini? Bạn đang chạy MVC v1.0, phải không? Chữ ký phương thức của hành động không thành công là gì? – GalacticCowboy

+4

Tôi thích khi tôi tìm một người nào đó hỏi chính xác câu hỏi mà tôi có - chỉ để thấy rằng nó bị đóng cửa vì không được áp dụng cho những khách truy cập khác. FML. –

Trả lời

14

Tôi đã thử nghiệm trên máy tính của mình, trên cả định nghĩa lớp và phương thức hành động và nó hoạt động cho tôi trong cả hai trường hợp. Bạn có chắc chắn quan điểm của bạn phù hợp với phương pháp/bộ điều khiển của bạn? Bạn đang đặt thuộc tính vào phương thức GET hoặc phương thức POST?

[AcceptVerbs(HttpVerbs.Post)] 
[ValidateInput(false)] 
public ActionResult MyAction (int id, string content) { 
    // ... 
} 
+0

Trong câu hỏi ban đầu, tôi đã nói rằng tôi đã làm điều đó. Và tham chiếu của tôi, Apress Pro ASP.NET MVC Framework, nêu rõ, "Nếu bạn muốn vô hiệu hóa nó hoặc cho một phương thức hành động cụ thể hoặc trên một bộ điều khiển cụ thể, bạn có thể sử dụng bộ lọc [ValidateInput], như sau: [ ValidateInput (false)] lớp công khai MyController: Controller {...} " –

+0

Xem http://stackoverflow.com/questions/807662/why-is-validateinputfalse-not-working –

+2

Xin lỗi, Ronnie. Nó hoạt động trên máy tính của tôi, cho dù tôi đặt thuộc tính vào phương thức hay lớp. –

2

Pro ASP.NET MVC Framework (p466) cho biết đây là vụ phải làm việc:

public class MyController : Controller 
{ 
    public MyController() { 
     ValidateRequest = false; 
    } 
} 
+0

Nó không intellisense hoặc biên dịch ở đó. Tôi đã thử đưa nó vào phương thức hành động (ở đâu nó có liên quan), nhưng nó không hoạt động. –

+0

"ValidateRequest = false;" được cho là nằm trong hàm tạo. Tôi đã thử nó trên một trong những bộ điều khiển của tôi nhưng phiên âm nó sai. – keithm

+0

Nó hoạt động nếu bạn đặt nó vào hàm tạo. –

0

Bạn có thể gửi tập tin điều khiển của bạn và xem file của bạn.

Tác phẩm này;

MytestController --------------------------------

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Ajax; 

namespace testapp.Controllers 
{ 
    [ValidateInput(false)] 
    public class MyTestController : Controller 
    { 

     public ActionResult Index() 
     { 
      return View(); 
     } 

    } 
} 

MyTest (Index) - -------------------------------------------------- ---

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Index</title> 
</head> 
<body> 
<% using (Html.BeginForm()) { %> 
<%= Html.TextBox("test")%> 
<button type="submit" >Submit</button> 
<%} %> 
</body> 
</html> 
+0

mẫu của bạn cho asp.net mvc 2 không hoạt động – IEnumerator

12

để làm cho nó làm việc bạn cần phải sửa đổi web.config cũng như:

<system.web> 
    <httpRuntime requestValidationMode="2.0"/> 
    ... 
</system.web> 
+0

Tôi đã có dự án ASP.NET MVC 1.0 được triển khai trong hơn một năm, tối nay khách hàng gửi cho tôi một email nói với tôi rằng một trong các biểu mẫu sử dụng trình soạn thảo WYSIWYG sẽ không Gửi đi. Tôi đã có [ValidateInput (false)] trên hành động miễn là trang web đã được triển khai và nó hoạt động tốt cho đến gần đây. Nhà cung cấp dịch vụ lưu trữ phải thay đổi thứ gì đó ở cuối của họ. Tôi đã thêm thẻ httpRuntime vào system.web như Jan đề xuất và nó đã khắc phục sự cố của tôi. –

Các vấn đề liên quan