Вопрос по asp.net-mvc-4 – Не удается получить ASP.NET 4 Web API для возврата кода состояния «201 - Создано» для успешного POST

8

Я пытаюсь вернуть HTTP-код состояния201 Created для операции RESTful POST с использованием ASP.NET 4 Web API, но я всегда получаю200 OK.

В настоящее время я выполняю отладку в IIS 7.5.7600.16385, VS 2010 Professional, 64-разрядной версии Windows 7 Professional.

<code>public MyResource Post(MyResource myResource)
{
    MyResource createdResource;
    ...
    HttpResponse response = HttpContext.Current.Response;
    response.ClearHeaders(); // added this later, no luck
    response.ClearContent(); // added this later, no luck
    response.StatusCode = (int)HttpStatusCode.Created;
    SetCrossOriginHeaders(response);
    return createdResource;
}
</code>

Я видел другие примеры, гдеHttpContext.Current.Response.StatusCode устанавливается перед возвратом данных, поэтому я не думал, что это будет проблемой. Я еще не нашел его в источнике MVC 4.

(Это связано с моими исследованиями сэтот вопро но достаточно другая тема, чтобы оправдать свой вопрос)

Я не уверен, является ли проблема IIS или веб-API. Я сделаю дополнительные тесты, чтобы сузить его.

Ваш Ответ

2   ответа
9

HttpContext.Current похмелье из прошлого.

Вам нужно определить ответ какHttpResponseMessage<T>:

public HttpResponseMessage<MyResource> Post(MyResource myResource)
{
    .... // set the myResource
    return new HttpResponseMessage<MyResource>(myResource)
            {
                StatusCode = HttpStatusCode.Created
            };
}
ОБНОВИТ

Как вы могли заметить из комментариев, этот подход работает сбет выпуск.Н RC.

Благодарность! Это сделал это. На самом деле я просто возвращаю HttpResponseMessage, чтобы при необходимости я мог возвращать другой тип контента, но при необходимости создаю экземпляр HttpResponseMessage <T>, что также заботится о моем связанном вопросе / Stackoverflow.com вопросы / 10336733 / .... MikeJansen
@ MikeJansen Не слишком привыкайте к HttpResponseMessage <T> из T, так как он исчезнет в будущих сборках. Видеть Aspnetwebstack.codeplex.com / обсуждения / 350492 Darrel Miller
HttpResponseMessage нельзя использовать с аргументами типа. Florian Winter
@ DarrelMiller - спасибо, я преобразовал в HttpRequestMessage.CreateResponse <T> ()! MikeJansen
-1

Попробуй это

return Request.CreateResponse<MyResource>(HttpStatusCode.Created, createdResource);

Похожие вопросы