2013-04-04 2 views
22

По какой-то причине, Request.CreateResponse теперь «красный» в VS2012 и когда я парить над использованием интегрированная среда говоритWeb Api Request.CreateResponse HttpResponseMessage нет IntelliSense 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); 
     } 
    } 
} 

Конечно, код компилируется и работает, это просто действительно раздражает видеть все «красный» на моем экране. Кроме того, intellisense не работает сейчас, когда я набираю Request.CreateResponse. Это также сработало, но я начал разрабатывать другие компоненты для своего API и только что вернулся к контроллерам зданий, поэтому не знаю, что произошло.

Любые мысли?

+1

Это случается очень много для меня и то, как оно возвращается, заключается в том, чтобы закрыть ВС и снова открыть его, досаду, с которой мне нужно жить, надеюсь, ненадолго. –

+0

@ von v. Я пробовал это, не повезло:/ – crizzwald

+0

Убедитесь, что для свойства action для файла установлено значение «Скомпилировать», а не «Содержимое». – StingyJack

ответ

16

Поскольку этот метод расширения живет в System.Net.Http, вам просто нужно включить его в свои заявления о записях.

using System.Net.Http; 
+4

OP сделал в строке 5. Без этого не собирался. –

16

Необходимо добавить ссылку на System.Net.Http.Formatting.dll. Определен метод расширения CreateResponse.

+0

Это правильный ответ. – trevorc

+6

Я сделал это решение, и оно не сработало. – iroel

+9

iroel, вероятно, потому, что ваш контроллер не происходит от ApiController. – slashp

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

Это на самом деле довольно странно, как только я положил «это», он сказал, что я могу удалить его ... –

+2

Базовый класс первоначально был «Контроллером» в моем автосозданном решении, как только я сменил его на «ApiController», неожиданно был найден «CreateResponse». – paqogomez

4

Вы можете использовать

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Gone) 

вместо

Request.CreateResponse(HttpStatusCode.Gone) 
0

Добавить ссылку на System.Web.Http к проекту. Затем добавьте

Using System.Web 

наверху cs-файла.

Смежные вопросы