Атрибут, чтобы сделать данное действие, чтобы принять данный тип контента? - PullRequest
1 голос
/ 26 апреля 2019

Возможно ли в ASP.NET Core MVC изменить только определенные действия для принятия plain/text или application/xml (т. Е. content-type) с атрибутом без изменения форматеров ввода по умолчанию?

1 Ответ

2 голосов
/ 26 апреля 2019

Из коробки ASP.NET Core поддерживает только JSON или XML. Пока вы устанавливаете типы содержимого полезной нагрузки, она должна правильно десериализоваться независимо от действия контроллера.

Если вам нужна поддержка для любого другого типа контента (например, текст / обычный текст), вы можете создать пользовательский форматер

Пример, взятый непосредственно из образцов 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);
    }
}
...