Web Api Request.CreateResponse HttpResponseMessage no intellisense VS2012

时间:2013-04-04 15:58:09

标签: c# asp.net-mvc-4 visual-studio-2012 asp.net-web-api

出于某种原因,Request.CreateResponse现在在VS2012中显示为“红色”,当我将鼠标悬停在使用状态时,IDE会说

  

无法解析符号'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时,intellisense现在不起作用。这也常用,但我开始为我的API开发其他部件,然后回到构建控制器,所以我不知道发生了什么。

有什么想法吗?

6 个答案:

答案 0 :(得分:19)

您需要添加对System.Net.Http.Formatting.dll的引用。 CreateResponse扩展方法在那里定义。

答案 1 :(得分:17)

由于此扩展方法位于System.Net.Http,因此您只需将其包含在您的usings语句中。

using System.Net.Http;

答案 2 :(得分:6)

这是因为你必须这样做:

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

答案 3 :(得分:4)

您可以使用

 HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Gone)

而不是

 Request.CreateResponse(HttpStatusCode.Gone)

答案 4 :(得分:0)

向项目添加对System.Web.Http的引用。然后添加

Using System.Web 

到cs文件的顶部。

答案 5 :(得分:-3)

这是VB.NET和Request.CreateResponse的已知问题。

有一种解决方法: Missing request.CreateResponse in vb.net Webapi Projects