Birkaç seçeneğiniz var.
Modelde, HTML'ye izin vermeniz gereken her özelliğe bu özelliği ekleyin - en iyi seçim
using System.Web.Mvc;
[AllowHtml]
public string SomeProperty { get; set; }
Denetleyici eyleminde, tüm HTML'ye izin vermek için bu özniteliği ekleyin
[ValidateInput(false)]
public ActionResult SomeAction(MyViewModel myViewModel)
Web.config dosyasında kaba kuvvet - kesinlikle önerilmez
Web.config dosyasında, etiketlerin içine requestValidationMode = "2.0" niteliğine sahip httpRuntime öğesini ekleyin. Ayrıca, pages öğesine validateRequest = "false" özniteliğini ekleyin.
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
<pages validateRequest="false">
</pages>
</configuration>
Daha fazla bilgi: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Yukarıdakiler, varsayılan model ciltleyicinin kullanımları için çalışır.
Özel ModelBinder
Yukarıdaki kodda bağlamaContext.ValueProvider.GetValue () çağrısının, özniteliklerden bağımsız olarak verileri her zaman doğruladığı görülmektedir. ASP.NET MVC kaynaklarına derinlemesine incelemek, DefaultModelBinder'in önce istek doğrulamasının gerekli olup olmadığını kontrol ettiğini ve ardından doğrulamanın gerekli olup olmadığını gösteren bir parametre ile bindingContext.UnvalidatedValueProvider.GetValue () yöntemini çağırdığını ortaya çıkarır.
Ne yazık ki, kapalı, özel veya cahil geliştiricileri tehlikeli şeyler yapmaktan korumak için herhangi bir çerçeve kodu kullanamıyoruz, ancak AllowHtml ve ValidateInput niteliklerine saygı duyan çalışan bir özel model bağlayıcı oluşturmak çok zor değil:
public class MyModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
var theValue = valueProviderResult.AttemptedValue;
}
}
}
Diğer gerekli parça, doğrulanmamış bir değeri almanın bir yoludur. Bu örnekte ModelBindingContext sınıfı için bir genişletme yöntemi kullanıyoruz:
public static class ExtensionHelpers
{
public static ValueProviderResult GetValueFromValueProvider(this ModelBindingContext bindingContext, bool performRequestValidation)
{
var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
return (unvalidatedValueProvider != null)
? unvalidatedValueProvider.GetValue(bindingContext.ModelName, !performRequestValidation)
: bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
}
}
Bununla ilgili daha fazla bilgi için http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/