Используйте 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
и работать с ним в форматере. В случае другого объекта это может быть более общее и стабильное решение, поскольку оно опирается на конкретную структуру.