14

调用此方法:

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.

我在这里想念什么?

4

2 回答 2

26

的运行时类型item可能不是Product. 你应该能够做到这一点:

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

即使item是 的一个实例Product,泛型<Product>参数也是多余且不必要的。如果您使用 ReSharper,它会告诉您“(通用)类型参数规范是多余的”。

更新

Controller您的课程是否从or延伸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.

于 2012-12-20T11:59:59.973 回答
19

CreateResponse 是命名空间中定义的扩展方法System.Net.Http。确保在项目中添加对System.Net.Http和的引用,System.Net.Http.Formatting并添加正确的 using 指令:

C#:
using System.Net.Http;

VB:
Import System.Net.Http

于 2014-08-21T14:15:49.207 回答