gpt4 book ai didi

c# - MvcOptions.InputFormatters 不适用于 asp.net vnext beta7

转载 作者:行者123 更新时间:2023-11-30 14:27:38 26 4
gpt4 key购买 nike

我的应用程序在迁移到 beta 6/7 后停止工作,经过调查,我发现我的 json 反序列化器不再使用( Jil ),它被称为写入而不是读取。

我搜索论坛和阅读 aspnet 代码已经 3 天了,但我还没有找到问题。

我注意到在 beta 6 中到处都使用 JSON.net,在 beta 7 中用得少了一点。

这是我的代码:

    public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore(options =>
{
var jilFormatter = new JilMediaTypeFormatter();
options.OutputFormatters.Clear();
options.OutputFormatters.Add(jilFormatter);
options.InputFormatters.Clear();
options.InputFormatters.Add(jilFormatter);

options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json"));

options.ModelBinders.Add(new DocumentModelBinder());
options.ModelBinders.Add(new DataTablesBinder());
});
services.AddDataProtection();
services.AddWebEncoders();

}

即使我只执行 InputFormatters.Clear() 而没有添加对象,它也会不断反序列化请求,我不知道它是如何做到的。

还有我的 JIL InputFormatter/OutputFormatter(ouputformatter 有效,我可以中断 CanWrite,但 CanRead 没有任何反应)

internal class JilMediaTypeFormatter : IOutputFormatter, IInputFormatter
{
private static readonly string [] _readableTypes = new[] { "application/json", "text/json", "text/javascript" };
private static readonly Task<bool> _done = Task.FromResult(true);

private readonly Options _options = Options.RFC1123ExcludeNullsIncludeInherited;


public bool CanWriteResult(OutputFormatterContext context, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType)
{
return contentType ==null || _readableTypes.Contains(contentType.MediaType.ToLowerInvariant());
}

public Task WriteAsync(OutputFormatterContext context)
{
context.HttpContext.Response.ContentType = "application/json";
using (var writer = new StreamWriter(context.HttpContext.Response.Body))
{
JSON.Serialize(context.Object, writer, _options);
writer.Flush();
return _done;
}
}

public bool CanRead(InputFormatterContext context)
{
return _readableTypes.Contains(context.HttpContext.Request.ContentType);
}

public Task<object> ReadAsync(InputFormatterContext context)
{
var reader = new StreamReader(context.HttpContext.Request.Body);
var result = JSON.Deserialize(reader, context.ModelType, _options);
return Task.FromResult(result);
}
}

最佳答案

InputFormatters 仅在 [FromBody] 用于 Action 的参数列表中时使用。

关于c# - MvcOptions.InputFormatters 不适用于 asp.net vnext beta7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083779/

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