Метод CreateResponse в API-интерфейсе asp.net

вызов этого метода:

public HttpResponseMessage PostProduct(Product item)
{
    item = repository.Add(item);
    var response = this.Request.CreateResponse<Product>CreateResponse(HttpStatusCode.Created, item);

    string uri = Url.RouteUrl("DefaultApi", new { id = item.Id });
    response.Headers.Location = new Uri(uri);
    return response;
}

Вызывает ошибку времени компиляции:

'System.Web.HttpRequestBase' does not contain a definition for 'CreateResponse' and the
            best extension method overload 'System.Net.Http.HttpRequestMessageExtensions.CreateResponse<T>
(System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode, T)' has some invalid arguments.

Что мне здесь не хватает?

Ответ 1

Тип среды выполнения item, вероятно, не является экземпляром Product. Вы должны быть в состоянии сделать это:

var response = Request.CreateResponse(HttpStatusCode.Created, item);

Даже если item был экземпляром Product, общий аргумент <Product> является избыточным и необязательным. Если вы использовали ReSharper, он сказал бы вам, что спецификация аргументов типа "(Generic)" избыточна ".

Обновление

Продолжается ли ваш класс от Controller или ApiController? Ошибка должна быть 'System.Net.Http.HttpRequestMessage' does not contain a definition for..., а не 'System.Web.HttpRequestBase' does not contain a definition for....

Контроллеры WebApi должны простираться от ApiController, а не Controller. В контроллере MVC this.Request указывает на экземпляр System.Web.HttpRequestBase. В контроллере WebAPI this.Request указывает на экземпляр System.Net.Http.HttpRequestMessage.

Ответ 2

CreateResponse - это метод расширения, определенный в пространстве имен System.Net.Http. Не забудьте добавить ссылку на System.Net.Http и System.Net.Http.Formatting в свой проект и добавить правильную директиву:

С#:
using System.Net.Http;

VB:
Import System.Net.Http