AllowHtml не работает для сайта ASP.Net Mvc 3

Мы пытаемся использовать украшение [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) %> <% } %>

5
задан Community 23 May 2017 в 11:59
поделиться