Chúng tôi đang cố gắng sử dụng [AllowHtml] trang trí trên một trong những thuộc tính ViewModel của chúng tôi để chúng tôi có thể tránh được YSOD:AllowHtml không làm việc cho ASP.Net MVC 3 trang web
Một Request.Form nguy hiểm giá trị được phát hiện từ ứng dụng (RequestText =
"<br>"
).
khi chúng tôi cố gắng gửi văn bản html, như: <br>
. Chúng tôi muốn sử dụng Server.HtmlEncode trong hành động điều khiển để ngăn chặn các cuộc tấn công, nhưng khi chúng tôi trang trí thuộc tính với [AllowHtml]
nó không ảnh hưởng và nếu chúng tôi cố sử dụng [ValidateInput(false)]
trên hành động của bộ điều khiển, nó cũng không có tác dụng. Chúng tôi nhìn thấy một StackOverflow Post nói rằng trong MVC 3 RC2 rằng bạn phải thêm:
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider(); đối với global.asax
Chúng tôi cũng đã thử điều đó, mặc dù chúng tôi đang sử dụng phiên bản phát hành MVC 3, chứ không phải RC2, nhưng điều đó cũng không có tác dụng. Có ai biết làm thế nào để sửa lỗi này?
mẫu:
namespace UI.Models.ViewModel
{
public class CustomerRequestSupport
{
/// <summary>
/// Gets or Sets the textual description entered by the Customer for
/// the support requested.
/// </summary>
[AllowHtml]
public string RequestText { get; set; }
}
}
Bộ điều khiển:
[HttpPost]
[TabsActionFilter]
public ActionResult RequestSupport(CustomerRequestSupport collection)
{
if (ModelState.IsValid)
{
Ticket ticket = new Ticket();
ticket.Requestor = LoggedInCustomer;
ticket.Summary = "General Support Ticket";
ticket.Notes = Server.HtmlEncode(collection.RequestText);
var errors = _ticketService.SubmitTicket(ticket);
if (errors.Any())
{
ModelState.AddModelError("collection",
String.Format("An error has occurred in your Request for Support: " +
"{0} Please try again later or call the help desk " +
"for immediate assistance.",
errors.Aggregate((acc, st) => acc + " " + st)));
}
else
{
TempData["FlashMessage"] = String.Format("Your request for support has been " +
"submitted, the Ticket Number is: {0}.", ticket.TicketNumber);
return AutoMapView<CustomerDetails>(View("Details", base.LoggedInCustomer));
}
}
//needed for tabs to show
ViewData.CustomerContactSet(base.LoggedInCustomer);
return View();
Xem:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<UI.Models.ViewModel.CustomerRequestSupport>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Request Support
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PageTitle" runat="server">
Request Support
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm())
{ %>
<%= Html.ValidationSummary() %>
<h2>Enter a description of the support needed</h2>
<%: Html.TextAreaFor(m => m.RequestText, 4, 90, null) %>
<input type="submit" value="Submit" />
<% } %>
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="JavaScriptContent" runat="server">
</asp:Content>
chỉ ra rằng chúng tôi đang sử dụng phiên bản 0.81 của Glimpse và khi chúng tôi cập nhật lên phiên bản phát hành hiện tại, nó hiện đang hoạt động tốt. –