wake-up-neo.net

Web Api Request.CreateResponse HttpResponseMessage no intellisense VS2012

Aus irgendeinem Grund ist Request.CreateResponse in VS2012 jetzt "rot" und wenn ich über die Verwendung schwebe, sagt die IDE

Symbol 'CreateResponse' kann nicht aufgelöst werden

Hier ist die ApiController-Klasse:

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

Zugegeben, der Code kompiliert und funktioniert, es ist einfach ärgerlich, wenn man all die "roten" auf meinem Bildschirm sieht. Außerdem funktioniert der Intellisense jetzt nicht, wenn ich Request.CreateResponse eingebe. Das hat auch funktioniert, aber ich fing an, andere Teile für meine API zu entwickeln und kam gerade zum Erstellen von Controllern zurück.

Irgendwelche Gedanken?

24
crizzwald

Sie müssen einen Verweis auf System.Net.Http.Formatting.dll hinzufügen. Die Erweiterungsmethode CreateResponse ist dort definiert.

18
Rafael Romão

Da diese Erweiterungsmethode in System.Net.Http lebt, müssen Sie sie nur in Ihre usings-Anweisungen aufnehmen.

using System.Net.Http;
17
scidec

Dies liegt daran, dass Sie Folgendes tun müssen:

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

Beachten Sie die this.
In meinem Fall bekommt der Compiler es jetzt . Sah das Beispiel hier

6
Jappie Kerk

Sie können verwenden 

 HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Gone)

anstatt 

 Request.CreateResponse(HttpStatusCode.Gone)
4
Diwakar Sharma

Fügen Sie dem Projekt einen Verweis auf System.Web.Http hinzu. Dann füge hinzu 

Using System.Web 

an der Spitze der cs-Datei.

0
mmcc