执行给定动作以接受给定内容类型的属性?

时间:2019-04-26 08:45:01

标签: c# asp.net-core .net-core asp.net-core-mvc

在ASP.NET Core MVC中是否可以仅更改某些操作以接受具有属性的plain/textapplication/xml(即content-type),而无需更改默认的输入格式设置? / p>

1 个答案:

答案 0 :(得分:2)

开箱即用,ASP.NET Core仅支持JSON或XML。只要设置了有效内容的内容类型,它就可以正确地反序列化,而不考虑控制器的操作。

如果要支持其他任何内容类型(例如,文本/纯文本),则可以创建custom formatter

直接取自aspnet示例repo的示例:

public class TextPlainInputFormatter : TextInputFormatter
{
    public TextPlainInputFormatter()
    {
        SupportedMediaTypes.Add("text/plain");
        SupportedEncodings.Add(UTF8EncodingWithoutBOM);
        SupportedEncodings.Add(UTF16EncodingLittleEndian);
    }

    protected override bool CanReadType(Type type)
    {
        return type == typeof(string);
    }

    public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
    {
        string data = null;
        using (var streamReader = context.ReaderFactory(context.HttpContext.Request.Body, encoding))
        {
            data = await streamReader.ReadToEndAsync();
        }
        return InputFormatterResult.Success(data);
    }
}