Fügen Sie einen benutzerdefinierten header der Antwort in ApiController

Bis jetzt hatte ich eine GET Methode, die aussah wie die folgenden:

protected override async Task<IHttpActionResult> GetAll(QueryData query)
{
     //... Some operations

     //LINQ Expression based on the query parameters
     Expression<Func<Entity, bool>> queryExpression = BuildQueryExpression(query);

     //Begin to count all the entities in the repository
     Task<int> countingEntities = repo.CountAsync(queryExpression);

     //Reads an entity that will be the page start
     Entity start = await repo.ReadAsync(query.Start);

     //Reads all the entities starting from the start entity
     IEnumerable<Entity> found = await repo.BrowseAllAsync(start, queryExpression);

     //Truncates to page size
     found = found.Take(query.Size);

     //Number of entities returned in response
     int count = found.Count();

     //Number of total entities (without pagination)
     int total = await countingEntities;

     return Ok(new {
          Total = total,
          Count = count,
          Last = count > 0 ? GetEntityKey(found.Last()) : default(Key),
          Data = found.Select(e => IsResourceOwner(e) ? MapToOwnerDTO(e) : MapToDTO(e)).ToList()
     });
}

Dieser arbeitete wie ein Charme, und es war gut. Allerdings wurde mir gesagt, vor kurzem zum senden der Antwort Metadaten ( Total , Count und Last Eigenschaften) als Antwort benutzerdefinierte Header statt der Antwort Körper.

Kann ich nicht verwalten, um den Zugriff auf die Response von der ApiController. Ich dachte an einen filter oder ein Attribut, aber wie bekomme ich die Metadaten?

Kann ich halten alle diese Informationen auf die Antwort und dann haben Sie einen filter, deserialisiert die Antwort, bevor Sie an den client gesendet, und eine neue erstellen mit dem Header, aber das scheint lästig und schlecht.

Gibt es eine Möglichkeit zum hinzufügen von benutzerdefinierten Kopfzeilen direkt aus dieser Methode auf ein ApiController?

Sollte so einfach wie that
Ich habe nicht ein HttpContext Eigenschaft, aber ich habe ein ActionContext. Allerdings Response Eigenschaft des Objekts null und ich kann nicht arbeiten mit ihm.
Sie benötigen ActionContext.Anfrage.CreateResponse (), um tatsächlich zu erstellen, eine Antwort-und legen Sie dann die Werte in der Antwort als ein stark typisiertes Objekt anstelle von Zeichenfolgen
Ich möchte für das Web-Api zu serialisieren mein anonymes Objekt (d.h. die Web-Api Ok<T>(T t) Methode. Dazu gehört auch, dass einige Header für mich). Wenn ich eine Antwort habe ich auf mein Objekt serialisieren und ich habe alle überschriften manuell.
verschieben Sie alle header-Einstellung, Teil einer Methode, und verwenden Sie diese Methode an beiden Orten

InformationsquelleAutor Matias Cicero | 2015-08-14

Schreibe einen Kommentar