Request.CreateErrorResponse在哪里?

时间:2012-09-23 20:00:10

标签: c# .net asp.net-web-api

我在this blog post中看到了它,但实际上并没有说明如何“启用”它。而且似乎默认情况下它没有启用。

我知道这是一种扩展方法,如此处所定义:http://msdn.microsoft.com/en-us/library/hh835786(v=vs.108).aspx但我如何才能访问它?如果我键入Request.CreateErrorResponse,则编译器无法识别它。

我已经using System.Net.Http

8 个答案:

答案 0 :(得分:44)

我在发布版本中也注意到了这一点。如果你没有正确的使用声明,那就错了。你需要:

using System.Net.Http;

即使你已经有了这个:

using System.Web.Http.Controllers;

答案 1 :(得分:3)

Request是ApiController类的公共属性,应该可以在该控制器中的任何API操作中使用。

public abstract class ApiController
{
   ...
   public HttpRequestMessage Request { get; set; }
}

这是一个适合我的小代码示例:

using System.Net;
using System.Net.Http;
using System.Web.Http;


public class MyFirstApiController : ApiController
{
    // GET 
    public HttpResponseMessage Get(int id)
    {
        return Request.CreateErrorResponse(HttpStatusCode.ExpectationFailed, "Some   message here");
    }
}

有趣的是,如果我带走使用System.Net.Http;声明,请求不再具有CreateErrorResponse()方法。

答案 2 :(得分:2)

您是否仍在使用预发布版或发布版?有许多扩展直到发布之前才出现,并且在早期版本的webapi发行版中不存在。我不确定这是否是其中之一,但可能是导致你问题的原因。

答案 3 :(得分:2)

虽然已经回答了重点。

另一个最愚蠢的可能性是你可能选择了错误类型的控制器。 确保您已经创建了一个 Web API控制器,这是您无法拥有的MVC控制器

Request.CreateErrorResponse()

您可能会发现此问题的另一种可能性。

答案 4 :(得分:1)

答案 5 :(得分:1)

you can use from that In block Try-Catch.

 [HttpGet]
    public HttpResponseMessage DownloadVideo(Guid id, string title)
    {
        try
        {
          //Your Code at the end return result
        }
        catch (Exception ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex.Message);
        }
    }

答案 6 :(得分:0)

使用 System.Web.Http 程序集。 来源:CreateErrorResponse Method

答案 7 :(得分:-1)

我最好的猜测是,这是你没有引用的第三个程序集,就是问题。

不幸的是,我无法访问我的电脑,在手机上浏览,因此我无法为您追踪该文件。根据文档,它应该在System.Web.Http.SelfHost.dll中,所以我想你可以只搜索该文件来找到它。