【问题标题】:CreateResponse method in asp.net Web APIasp.net Web API 中的 CreateResponse 方法
【发布时间】:2014-10-08 01:02:31
【问题描述】:

调用这个方法:

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.

我在这里错过了什么?

【问题讨论】:

  • 请同时包含类定义,例如public ProductsController : ApiController {
  • 好的。我想我明白了。类定义为:public class ProductsController : Controller

标签: asp.net-web-api


【解决方案1】:

item 的运行时类型可能不是Product 的实例。你应该可以这样做:

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

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

更新

您的课程是从ControllerApiController 扩展而来的吗?错误应该是'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 的一个实例。

【讨论】:

  • .net 核心是什么?
【解决方案2】:

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

C#:
using System.Net.Http;

VB:
Import System.Net.Http

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 2014-12-17
    • 2012-03-08
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多