调用此方法:
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.
我在这里缺少什么?
答案 0 :(得分:23)
item
的运行时类型可能不是Product
的实例。你应该能够做到这一点:
var response = Request.CreateResponse(HttpStatusCode.Created, item);
即使item
是Product
的实例,泛型<Product>
参数也是多余的,不是必需的。如果您使用了ReSharper,它会告诉您“(通用)类型参数规范是多余的”。
<强>更新强>
您的课程是否从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
的实例。
答案 1 :(得分:18)
CreateResponse是System.Net.Http
命名空间中定义的扩展方法。
确保在项目中添加对System.Net.Http
和System.Net.Http.Formatting
的引用,并添加正确的using指令:
<强> C#:强>
using System.Net.Http;
<强> VB:强>
Import System.Net.Http