2013-04-04 67 views
22

出於某種原因,Request.CreateResponse現在是在VS2012的「紅」,當我將鼠標懸停在使用的IDE說網頁API Request.CreateResponse HttpResponseMessage沒有智能感知VS2012

無法解析符號「CreateResponse」

這裏是ApiController類:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.Http.Filters; 
using GOCApi.Attributes; 
using GOCApi.Models; 
using GOCApi.Models.Abstract; 
using AttributeRouting; 
using AttributeRouting.Web.Http; 

namespace GOCApi.Controllers 
{ 
    [RoutePrefix("Courses")] 
    public class CoursesController : ApiController 
    { 
     private ICoursesRepository _coursesRepository { get; set; } 

     public CoursesController(ICoursesRepository coursesRepository) 
     { 
      _coursesRepository = coursesRepository; 
     } 

     [GET("{id}")] 
     public HttpResponseMessage Get(int id) 
     { 
      var course = _coursesRepository.GetSingle(id); 
      if (course == null) 
      return Request.CreateResponse(HttpStatusCode.NotFound, "Invalid ID"); 
      return Request.CreateResponse(HttpStatusCode.OK, course); 
     } 
    } 
} 

當然,代碼中並編譯和作品,它只是真的很煩看到所有的我的屏幕上顯示「紅色」。此外,當我輸入Request.CreateResponse時,智能感知功能現在不起作用。這也用於工作,但我開始開發其他部分到我的API,並剛回到樓宇控制器,所以我不知道發生了什麼。

有什麼想法?

+1

它對我來說很重要,它回來的方式是關閉VS並重新打開它,煩惱我必須忍受,希望不會太久。 – 2013-04-04 16:00:52

+0

@von v。我試過了,沒有運氣:/ – crizzwald 2013-04-04 16:05:18

+0

確保文件構建操作屬性設置爲「編譯」而不是「內容」。 – StingyJack 2013-07-15 22:28:53

回答

16

由於此擴展方法存在於System.Net.Http中,因此您只需將其包含在usings語句中即可。

using System.Net.Http; 
+4

OP在第5行。沒有它不會編譯。 – 2013-06-06 19:34:00

16

您需要添加對System.Net.Http.Formatting.dll的引用。在那裏定義了CreateResponse擴展方法。

+0

這是正確的答案。 – trevorc 2013-10-15 17:27:38

+6

我已經完成了這個解決方案,並沒有奏效。 – iroel 2013-11-04 07:40:25

+9

iroel,這可能是因爲你的控制器不是從ApiController派生的。 – slashp 2014-09-08 13:05:50

5

這是因爲你必須做的:

namespace GOCApi.Controllers 
{ 
    [RoutePrefix("Courses")] 
    public class CoursesController : ApiController 
    { 
     private ICoursesRepository _coursesRepository { get; set; } 

     public CoursesController(ICoursesRepository coursesRepository) 
     { 
      _coursesRepository = coursesRepository; 
     } 

     [GET("{id}")] 
     public HttpResponseMessage Get(int id) 
     { 
      var course = _coursesRepository.GetSingle(id); 
      if (course == null){ 
       return this.Request.CreateResponse(HttpStatusCode.NotFound, "Invalid ID"); 
      } 
      return this.Request.CreateResponse(HttpStatusCode.OK, course); 
     } 
    } 
} 

注意this
在我的情況下,編譯器現在得到它。 看到的範例here

+0

這實際上很奇怪,一旦我放下'這個'它說我可以刪除它... – 2014-01-19 13:28:29

+2

在我的自動創建的解決方案中,基類最初是'Controller',一旦我將其更改爲'ApiController',突然發現了'CreateResponse'。 – paqogomez 2015-05-14 21:23:34

4

您可以使用

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Gone) 

代替

Request.CreateResponse(HttpStatusCode.Gone) 
0

一個參考System.Web.Http添加到項目中。然後添加

Using System.Web 

到cs文件的頂部。