- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在 ApiController 的请求处理方法中有这段代码:
if (uri != null)
{
HttpResponseMessage r = Request.CreateResponse(HttpStatusCode.Redirect);
r.Headers.Location = uri;
throw new HttpResponseException(r);
}
潜在的问题是“r”永远不会被释放(至少在我的代码中是这样)。
我可以将它包装在一个 using 中,但是在将响应流式传输到客户端之前,“r”不会被处理掉吗?
处理这个问题的正确方法是什么?
最佳答案
所有 examples我已经看到表明您不必处理响应。
public Product GetProduct(int id)
{
Product item = repository.Get(id);
if (item == null)
{
var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
{
Content = new StringContent(string.Format("No product with ID = {0}", id)),
ReasonPhrase = "Product ID Not Found"
}
throw new HttpResponseException(resp);
}
return item;
}
查看源代码到HttpResponseException , 它似乎用该值填充属性 (HttpResponseMessage Response
) 并处理它可能会导致 HttpResponseMessage 导致 ObjectDisposedException 或无法传递给客户端。
您还会注意到在源代码中有一个 SupressMessage:
[SuppressMessage("Microsoft.Reliability",
"CA2000:Dispose objects before losing scope",
Justification = "Instance is disposed elsewhere")]
实例在别处被处置(这不是指 HttpResponseMesssage,它没有实现 IDisposable)。
What is the correct way to handle this?
我认为不需要对您的代码进行任何更改。
关于c# - 我是否需要处理来自 Request.CreateResponse() 的 HttpResponseException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20688999/
我正在尝试设置 Behat,但是当我运行 bin/behat --init 时它无法初始化。我的composer.json取自官方docs : { "require": { "
鉴于以下情况: [HttpGet] [ActionName("GetContent")] public HttpResponseMessage GetContent(int i
我正在尝试找出一种方法来在我的响应中返回一个对象,同时仍然保持可理解的返回类型。 所以对于初学者来说,我知道这会按预期工作。 public async Task DoMyThing(MyObject
下面是我的代码(部分代码),我想将它迁移到 asp.net 核心。 我的问题是“Request.CreateResponse”在下面的代码中不起作用。我谷歌了很多,但找不到任何解决方案。我该如何解决?
我在尝试使用 post 请求调用我的 web api 时遇到问题,返回了一个空数组。 我的方法是: // POST: Api/v1/transaction/ [HttpPost] p
如何模拟 HttpRequestMessage,特别是 CreateResponse? var requestMessage = Substitute.For(); requestMessage.Cr
我构建了一个由 Http 请求触发的 C# Azure 函数应用程序。该应用程序的目的是使用数字孪生来更改我的设备的所需状态。为此,我导入了以下依赖项(在 project.son 文件中): "M
我的代码是 var response = Request.CreateResponse(HttpStatusCode.OK); response.Content = new StringContent
我在 ApiController 的请求处理方法中有这段代码: if (uri != null) { HttpResponseMessage r = Request.CreateRespons
我正在尝试在 ASP.Net Web API 中创建自定义 AuthorizeAttribute 来处理基本身份验证。覆盖 HandleUnauthorizedRequest 时,我发现 HttpAc
什么时候应该使用HttpResponseMessage对象,什么时候应该使用Request.CreateResponse(...)方法? 另外,HttpResponseMessage 对象和Reque
我正在使用 ASP.Net MVC 4 RC 的 ApiController,我正在尝试对 GET 方法进行单元测试。 此方法使用 CreateResponse 上的 HttpRequestMessa
我似乎已经找到了问题,但不知道如何解决它,或者我是否可以。 当我创建一个新的 C# WebAPI项目,并为 System.Net.Http 添加导入我可以访问Request.CreateRespons
我的Azure函数代码如下 public static class MyHttpTriggerFunction { public static async Task Run([Ht
出于某种原因,Request.CreateResponse 在 VS2012 中现在是“红色”,当我将鼠标悬停在 IDE 显示的用法上时 Cannot resolve symbol 'CreateRe
我一直在我的 api Controller 中发送响应,如下 (.Net Framework 4.5) public virtual async Task Import(Guid Id) {
我在这个方法上遇到了这个错误: [HttpGet] public HttpResponseMessage Search([ModelBinder(
我有空的 Web API 项目以及使用 VS2015 创建的完整 MVC 项目。我注意到 HttpRequestMessage 在 System.Net.Http 中,这很好,但不适用于下面的 Cre
我正在尝试为我的 ApiController 编写一些单元测试,但遇到了一些问题。有一个名为 Request.CreateResponse 的很好的扩展方法,它对生成响应有很大帮助。 public H
调用这个方法: public HttpResponseMessage PostProduct(Product item) { item = repository.Add(item);
我是一名优秀的程序员,十分优秀!