在ASP.NET Core MVC中是否可以仅更改某些操作以接受具有属性的plain/text
或application/xml
(即content-type
),而无需更改默认的输入格式设置? / p>
答案 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);
}
}