5

Bu, ilgili question ile ilgilidir, ancak bu durumda iade ettiğim bir şey değil, model bağlamadır. JSON payload ile bir sayfaya gönderilen gelen e-postaları işlemek için Postmark kullanıyorum.MVC uygulamasında Postmark'tan büyük JSON girdilerini nasıl kullanabilirim?

Aşağıdaki gibi bir modelim var ve bu JSON yükünü (uygulama/json ile yüklenen) alan bir eylem var ve bunu işler.

public class EmailModel 
{ 
    public IDictionary<string, string> Headers { get; set; } 
    public string From { get; set; } 
    public string Cc { get; set; } 
    public string HtmlBody { get; set; } 
    public string TextBody { get; set; } 
    public string ReplyTo { get; set; } 
    public string Tag { get; set; } 
    public string To { get; set; } 
    public string MessageID { get; set; } 
    public string MailboxHash { get; set; } 
    public string Subject { get; set; } 
    public List<Attachment> Attachments { get; set; } 
} 

public class Attachment 
{ 
    public string Content { get; set; } 
    public int ContentLength { get; set; } 
    public string ContentType { get; set; } 
    public string Name { get; set; } 

} 

Bu küçük ekleri için çalışıyor, ancak varsayılan maxJsonLength özelliğini aşan şey için seri kaldırma hataya neden oluyor. ("JSON JavaScriptSerializer kullanılarak serileştirme veya serileştirme sırasında hata. Dizenin uzunluğu, maxJsonLength özelliğinde ayarlanan değeri aşıyor.") Görüntü eklerini kabul etmek istediğimden bu, çoğu resmin başarısız olduğu anlamına gelir.

Web.config dosyasını güncellemeyi denedim, ancak diğer konulara göre, bu MVC denetleyicileri için yardımcı olmaz. Muhtemelen özel bir IModelBinder'de bahsettiğim şeyi yapabilirim, ancak serileştirmeyi nasıl engelleyeceğimi düşünüyorum. (Diğer bir deyişle, hala seri hale getirme başarısız oldu çünkü hala başarısız olur).

Herhangi bir öneriniz var mı? Ben

cevap

3

Sen Json.NET kullanan bir custom JsonValueProviderFactory yazabilirsiniz .... ben özlüyorum salakça bir sadece eminim:

ValueProviderFactories.Factories.Remove(ValueProviderFactories.Factories.OfType<JsonValueProviderFactory>().FirstOrDefault()); 
ValueProviderFactories.Factories.Add(new JsonDotNetValueProviderFactory()); 
+0

Teşekkür Darin:

public sealed class JsonDotNetValueProviderFactory : ValueProviderFactory { public override IValueProvider GetValueProvider(ControllerContext controllerContext) { if (controllerContext == null) throw new ArgumentNullException("controllerContext"); if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase)) return null; var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream); var bodyText = reader.ReadToEnd(); return String.IsNullOrEmpty(bodyText) ? null : new DictionaryValueProvider<object>(JsonConvert.DeserializeObject<ExpandoObject>(bodyText, new ExpandoObjectConverter()) , CultureInfo.CurrentCulture); } } 

ve Application_Start yılında

- iyi bir yaklaşım gibi görünüyor. Yarın bir atış yapacağım. –

+0

@Darin Bunu tüm uygulama yerine belirli bir denetleyiciye eklemenin bir yolu var mı? –

+0

Merhaba Darin, bunun benim için neden çalışmadığını görmek için [sorum] (http://stackoverflow.com/q/32970848/7850) adresine bakabilir misiniz? Teşekkürler! –

İlgili konular