我在this blog post中看到了它,但实际上并没有说明如何“启用”它。而且似乎默认情况下它没有启用。
我知道这是一种扩展方法,如此处所定义:http://msdn.microsoft.com/en-us/library/hh835786(v=vs.108).aspx但我如何才能访问它?如果我键入Request.CreateErrorResponse
,则编译器无法识别它。
我已经using System.Net.Http
。
答案 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)
在.net核心中,添加Microsoft.AspNetCore.Mvc.WebApiCompatShim.dll
。
答案 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中,所以我想你可以只搜索该文件来找到它。