- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我试图理解两者并编写示例代码:
public HttpResponseMessage Get()
{
var response = ControllerContext.Request
.CreateResponse(HttpStatusCode.BadRequest, "abc");
throw new HttpResponseException(response);
}
和:
public HttpResponseMessage Get()
{
return ControllerContext.Request
.CreateResponse(HttpStatusCode.BadRequest, "abc");
}
从Fiddle上,我确实没有看出它们之间有什么区别,那么使用HttpResponseException
的目的是什么?
最佳答案
两者的主要区别在于此。该异常对于立即停止处理并退出很有用。例如假设我有以下代码
public class CustomerController : ApiController {
private ICustomerContext repo;
public CustomerController(ICustomerContext repo) {
this.repo = repo;
}
public Customer Get(int id) {
var customer = repo.Customers.SingleOrDefault(c=>c.CustomerID == id);
if (customer == null) {
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
return customer;
}
}
如果此代码运行并且我传递了一个不存在的 ID,它将立即停止处理并返回状态代码 404。
如果我返回 HttpResponseMessage,请求将愉快地继续其其余处理并返回 404。主要区别在于是否结束请求。
正如 Darrel 所说,在某些情况下我希望继续处理(如找到客户时)而在其他情况下我不想继续处理的情况下,异常很有用。
您可能希望在 Http POST 中使用类似 HttpResponseMessage 的地方来返回状态代码 201 并设置位置 header 。在那种情况下,我确实希望继续处理。这段代码就可以了。*
public class CustomerController : ApiController {
private ICustomerContext repo;
public CustomerController(ICustomerContext repo) {
this.repo = repo;
}
public HttpResponseMessage Post(Customer customer) {
repo.Add(customer);
repo.SaveChanges();
var response = Request.CreateResponse(HttpStatusCode.Created, customer);
response.Headers.Location = new Uri(Request.RequestUri, string.format("customer/{0}", customer.id));
return response;
}
}
*注意:如果您使用的是测试版,您将创建一个新的 HttpResponseMessage。我正在使用后面的位,但是这需要您使用请求之外的 CreateResponse 扩展方法。
上面,我创建了一个响应,将状态代码设置为 201,传入客户,然后设置位置 header 。
然后返回响应,请求继续处理。
希望对你有帮助
关于c# - HttpResponseMessage 和 HttpResponseException 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10660721/
我试图抛出一个 HttpResponseException(HttpStatusCode.NotFound) 并且我收到以下错误 The response message returned by th
我正在编写一个单元测试方法来执行代码,在我的测试条件下,预计会抛出带有特定响应消息的 HttpResponseException。 我的测试方法代码的相关部分如下所示: try { MyCla
我正在学习 Badrinarayanan Lakshmiraghavan 在“实用 ASP.NET Web API”中的教程。 我认为这表明可以使用一些异常将“404 - Not Found”类型的东
我正在使用 Apache HttpComponents 客户端 POST 到返回 JSON 的服务器。问题是,如果服务器返回 400 错误,我似乎无法判断错误来自 Java(到目前为止不得不求助于数据
我正在尝试通过以下方式返回状态码 throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized
我正在尝试引发 HttpResponseException,如该截屏视频中所述(大约 1 分钟) throw new HttpResponseException(HttpStatusCode.Unau
我在处理 MVC 4 webAPI 中的错误时遇到了一个大问题。在这里,我想验证传入的请求并发回 BadRequest 响应。 为此,我正在使用代码 public Product GetProduct
我已经为我的 Web API Controller 操作创建了一个异常过滤器,但它似乎没有做任何事情(即使它确实被调用)。 属性 public class ExceptionHandlerAttrib
如果出现错误,我会从我调用的 REST 服务中获得 HTTPResponseException。我想从中获取错误消息的详细信息,以便我可以进行相应处理。如何提取返回的HTTPResponseExcep
我试图理解两者并编写示例代码: public HttpResponseMessage Get() { var response = ControllerContext.Request
我正在使用 Apache HttpComponents (4.5.11) 来测试 Web API。 对于负面测试(例如发送错误的请求),我还想检查响应正文,但 CloseableHttpClient
我有一个类: public class ApiExceptionFilterAttribute : ExceptionFilterAttribute,IExceptionFilter {
如何在 ApiController 中向前端返回带有“无效用户名”等文本的错误请求异常。我的代码: public class FrontEndController : ApiController
我的问题的来源是以下代码,它是 Microsoft documentation 中包含的代码片段的一部分对于 asp.net web api 中的异常处理: var resp = new HttpRe
我在 ApiController 的请求处理方法中有这段代码: if (uri != null) { HttpResponseMessage r = Request.CreateRespons
评论一篇文章后Exception Handling in ASP.NET Web API对于何时抛出异常与返回错误响应,我有点困惑。我还想知道当您的方法返回域特定模型而不是 HttpResponseM
来自http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling HttpResponseExc
首先,我遇到了这个问题,在InsertAsync期间,RequestStatus的值无法从客户端传递到Mobile Service,该值将在null中处理(客户端 - 移动应用程序) (服务器 - A
在我的应用程序中,我使用 http 将用户信息发送到服务器,如下所示,我得到 org.apache.http.client.HttpResponseException: Not Found 我花了更多
我正在 ASP 5 中编写一个 api Controller 。如果传递给服务的参数不正确,我想返回一个错误的请求代码异常。在当前版本的 webapi 中,我会这样做: throw new HttpR
我是一名优秀的程序员,十分优秀!