Web Api Request.CreateResponse HttpResponseMessage no intellisense VS2012

cri*_*ald 25 c# asp.net-mvc-4 asp.net-web-api visual-studio-2012

出于某种原因,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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当然,代码确实可以编译和工作,只是看到屏幕上的所有"红色"真的很烦人.此外,当我输入时,intellisense现在不起作用Request.CreateResponse.这也用于工作,但我开始为我的API开发其他部件,然后回到构建控制器,所以我不知道发生了什么.

有什么想法吗?

Raf*_*mão 20

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

  • iroel,可能是因为你的控制器不是从ApiController派生的. (9认同)
  • 我已经完成了这个解决方案,但它没有用. (7认同)
  • 您必须引用System.Net.Http.Formatting dll但*using*是System.Net.Http.你需要两者. (4认同)

小智 17

由于此扩展方法存在System.Net.Http,您只需将其包含在usings语句中即可.

using System.Net.Http;
Run Code Online (Sandbox Code Playgroud)

  • OP在第5行做了.没有它就不会编译. (5认同)

Jap*_*erk 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意this.
在我的情况下,编译器现在得到它.看到这里的例子

  • 基类最初是在我自动创建的解决方案中的`Controller`,一旦我将其更改为'ApiController`突然发现了`CreateResponse`. (2认同)

小智 6

您可以使用

 HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.Gone)
Run Code Online (Sandbox Code Playgroud)

代替

 Request.CreateResponse(HttpStatusCode.Gone)
Run Code Online (Sandbox Code Playgroud)