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 を使用した場合、「(Generic) Type 引数の指定は冗長です」と通知されます。

アップデート

あなたのクラスは または から拡張されています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

于 2012-12-20T11:59:59.973 に答える