2013-04-04 15 views
22

Per qualche ragione, Request.CreateResponse è ora "rosso" in VS2012, e quando mi passa il mouse sopra l'uso dell'IDE diceWeb Api Request.CreateResponse HttpResponseMessage senza intellisense VS2012

Impossibile risolvere il simbolo 'CreateResponse'

Qui è la classe 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); 
     } 
    } 
} 

Certo, il codice non compilare e opere, è solo davvero fastidioso vedere tutte le "rosso" sul mio schermo. Inoltre, l'intellisense non funziona ora quando digito Request.CreateResponse. Anche questo funzionava, ma ho iniziato a sviluppare altre parti nella mia API e sono appena tornato a costruire controller, quindi non so cosa sia successo.

Qualche idea?

+1

Succede molto a me e il modo in cui ritorna è quello di chiudere VS e riaprirlo, fastidio che devo vivere con, spero non per molto. –

+0

@von v. L'ho provato, senza fortuna:/ – crizzwald

+0

Assicurati che la proprietà dell'azione di creazione del file sia impostata su "Compila" e non su "Contenuto". – StingyJack

risposta

16

Poiché questo metodo di estensione è disponibile in System.Net.Http, è sufficiente includerlo nelle istruzioni di utilizzo.

using System.Net.Http; 
+4

L'OP ha fatto alla riga 5. Senza non si compilerebbe. –

16

È necessario aggiungere un riferimento a System.Net.Http.Formatting.dll. Il metodo di estensione CreateResponse è definito lì.

+0

Questa è la risposta corretta. – trevorc

+6

Ho fatto questa soluzione e non ha funzionato. – iroel

+9

iroel, probabilmente perché il controller non deriva da ApiController. – slashp

5

Questo perché quello che dovete fare:

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); 
     } 
    } 
} 

Annotare la this.
Nel mio caso il compilatore ora lo ottiene. visto l'esempio here

+0

Questo in realtà è abbastanza strano, una volta messo giù questo, si dice che potrei rimuoverlo ... –

+2

La classe base era originariamente 'Controller' nella mia soluzione creata automaticamente, una volta che l'ho modificata in' ApiController', improvvisamente è stato trovato 'CreateResponse'. – paqogomez

4

È possibile utilizzare

HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Gone) 

invece di

Request.CreateResponse(HttpStatusCode.Gone) 
0

Aggiungere un riferimento al System.Web.Http al progetto. Quindi aggiungere

Using System.Web 

all'inizio del file cs.

Problemi correlati