Использовать привязку модели FromQuery в выходном форматере - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть собственный OutputFormatter в моем основном проекте .net.Там я хочу использовать некоторую информацию внутри строки запроса исходного запроса.

Внутри контроллера это хорошо делается с помощью связывателя моделей FromQuery, давая мне объект для работы.Я хотел бы также иметь этот объект (модель) в моем выходном форматере.

Могу ли я как-то вызвать FromQuery как экземпляр или тому подобное, чтобы я мог передать HttpContext или даже строку запроса, чтобы получить модель?

public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
    {
        // Want a model from my querystring here
    }

1 Ответ

0 голосов
/ 22 ноября 2018

Используйте HttpContext.Items. Помещенные там объекты будут очищены в конце запроса. И вы можете передать даже больше с ним, значения по умолчанию или измененные значения (возможно, это может быть опасным моментом, если вы собираетесь изменить связанный объект)

// GET api/values
[HttpGet]
public ActionResult Get([FromQuery] QData data)
{
    HttpContext.Items["data"] = data;
    .......
    return Ok(....);
}

Также вы можете иметь несколько форматеров для разных типов запросов.

public class Formatter : OutputFormatter
{
    public override bool CanWriteResult(OutputFormatterCanWriteContext context)
    {
        return context.HttpContext.Items["data"] is QData;
    }
    public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
    {
        var incoming = context.HttpContext.Items["data"] as QData;
        .......
    }
}

Точно так же вы можете поместить любой другой объект в Items и работать с ним в форматере. В случае другого объекта это может быть более общее и стабильное решение, поскольку оно опирается на конкретную структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...