Мы пытаемся использовать украшение [AllowHtml] в одном из наших свойств ViewModel, чтобы мы могли избежать YSOD:
Потенциально опасное значение Request.Form было обнаружено из клиент (RequestText =
"
).
"
, когда мы пытаемся отправить html-текст, например:
. Затем мы хотим использовать Server.HtmlEncode в действии контроллера для предотвращения атак, но когда мы украшаем свойство с помощью [AllowHtml]
, это не влияет, и если мы попытаемся использовать [ValidateInput (false )]
на действие контроллера, это тоже не влияет. Мы видели сообщение StackOverflow , в котором говорилось, что в MVC 3 RC2 вы должны добавить:
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider (); в global.asax
Мы тоже пробовали это, хотя мы используем релизную версию MVC 3, а не RC2, но это тоже не дало результата. Кто-нибудь знает, как это исправить?
Модель:
namespace UI.Models.ViewModel
{
public class CustomerRequestSupport
{
///
/// Gets or Sets the textual description entered by the Customer for
/// the support requested.
///
[AllowHtml]
public string RequestText { get; set; }
}
}
Контроллер:
[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(View("Details", base.LoggedInCustomer));
}
}
//needed for tabs to show
ViewData.CustomerContactSet(base.LoggedInCustomer);
return View();
Вид:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
Request Support
Request Support
<% using (Html.BeginForm())
{ %>
<%= Html.ValidationSummary() %>
Enter a description of the support needed
<%: Html.TextAreaFor( m => m.RequestText, 4, 90, null) %>
<% } %>