2017-02-01 7 views
4

В методе POST API 2 кажется, что лучший способ ответить - использовать метод CreatedAtRoute. Однако в некоторых ответах я хотел бы, чтобы тело ответа было пустым. Таким образом, ответ только с 201 и заголовком местоположения.Web API 2, который является лучшим способом вернуть пустую часть тела для ответов 201

Я бы ожидать, что это работает:

[HttpPost] 
[ResponseType(typeof(Product))] 
public IHttpActionResult Post([FromBody] Product product) 
{ 
    products.Add(product); 
    return CreatedAtRoute<Product>("", new {id = product.Id}, null); 
} 

Однако инспектирование это в Почтальон, он фактически возвращает строку «нуль». Есть ли элегантный способ сделать это?

+0

Пробовал все виды комбинаций здесь и даже при использовании в качестве Json.NET Serializer возвращает «нуль» (без кавычек). И поскольку он считается действительным json, я могу оставить его как есть. Это просто неправильно. – Werner

ответ

0

Вы можете использовать встроенный метод «Созданный» для простоты, но вы сказали, что тип ответа должен быть «Продуктом».

Created("getPathHere", newProductObject);

В противном случае, удалить тип отклика продукта, возвращает новый идентификатор продукта вместо (и любого статуса, что этот процесс создания, если он не является мгновенным).

Created(string.Format("/api/Products/{0}", productId), new { ProductId = productId, Status = "Awaiting Manufacture" });

+0

Я не вижу, как это может решить мою проблему. Я не хочу ничего в теле ответа. Все, что я хочу, это вернуть код 201 с заголовком местоположения. Нет содержания/тела. Я ожидал бы, что это будет возможно с предполагаемыми объектами ответа Web API 2 и медиаформатами. – Werner

+1

Потому что вы действительно должны что-то возвращать. Если вы действительно не хотите возвращать * ничего *, то удалите атрибут типа ответа, используйте метод «Созданный» и укажите null как объект. – Ehrys

+0

Никогда не думал об этом. Удаление типа возврата сделало трюк, спасибо! – Werner