Метод 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