gpt4 book ai didi

asp.net-mvc - 如何在 MVC 应用程序中处理来自 Postmark 的大型 JSON 输入?

转载 作者:行者123 更新时间:2023-12-02 13:00:23 25 4
gpt4 key购买 nike

这与此相关question ,但在这种情况下,我返回的不是模型绑定(bind),而是模型绑定(bind)。我正在使用Postmark处理传入的电子邮件,该电子邮件会发布到带有 JSON payload 的页面。

我有一个如下的模型和一个接受此 JSON 有效负载(与 application/json 一起发布)并处理它的操作。

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; }

}

这对于小附件来说效果很好,但是对于超过默认 maxJsonLength 属性的任何内容都会导致反序列化错误。 (“使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超出了 maxJsonLength 属性设置的值。”)因为我想接受图像附件,这意味着大多数图像都会失败。

我尝试更新 web.config,但根据其他线程,这对 MVC Controller 没有帮助。我想我可能可以执行自定义 IModelBinder 中提到的操作,但我正在努力解决如何拦截反序列化的问题。 (换句话说,它仍然失败,因为反序列化已经发生)。

有什么建议吗?我确信这只是我错过的一些愚蠢的事情......

最佳答案

你可以写一个custom JsonValueProviderFactory使用 Json.NET :

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);
}
}

并在您的Application_Start中:

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

关于asp.net-mvc - 如何在 MVC 应用程序中处理来自 Postmark 的大型 JSON 输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9577375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com