在ASP.NET MVC中设置空响应的Content-Type
发布时间:2020-12-16 07:15:50 所属栏目:asp.Net 来源:网络整理
导读:为了支持现场的遗留应用程序,我需要我的ASP.NET MVC应用程序返回一个也有Content-Type的空响应.当我发回null响应时,IIS,ASP.NET或ASP.NET MVC之一正在删除我的Content-Type.有没有办法解决? (虽然不需要设置Content-Type的空响应显然是理想的解决方案,但客
为了支持现场的遗留应用程序,我需要我的ASP.NET MVC应用程序返回一个也有Content-Type的空响应.当我发回null响应时,IIS,ASP.NET或ASP.NET MVC之一正在删除我的Content-Type.有没有办法解决?
(虽然不需要设置Content-Type的空响应显然是理想的解决方案,但客户已经在那里,其中许多都无法升级.) 编辑:由于存在代码请求:我正在将新Web应用程序的请求代理到旧客户端所依赖的请求.为此,我有一个ActionResult的子类,名为LegacyResult,您只需返回那些需要由旧软件处理的方法.这是其代码的相关部分: public override void ExecuteResult(ControllerContext context) { using (var legacyResponse = GetLegacyResponse(context)) { var clientResponse = context.HttpContext.Response; clientResponse.Buffer = false; clientResponse.ContentType = legacyResponse.ContentType; /* Yes,I checked that legacyResponse.ContentType is never string.IsNullOrEmpty */ if (legacyResponse.ContentLength >= 0) clientResponse.AddHeader("Content-Length",legacyResponse.ContentLength.ToString()); var legacyInput = legacyResponse.GetResponseStream(); using (var clientOutput = clientResponse.OutputStream) { var rgb = new byte[32768]; int cb; while ((cb = legacyInput.Read(rgb,rgb.Length)) > 0) { clientOutput.Write(rgb,cb); } clientOutput.Flush(); } } } 如果legacyInput有数据,则适当地设置Content-Type.否则,事实并非如此.我实际上可以克服旧的后端为完全相同的请求发送空的v.非空响应,并观察Fiddler的差异. 编辑2:使用Reflector调试显示,如果在调用HttpResponse.Flush时尚未写入标题,则Flush会自行写出标题.问题是它只写出一小部分标题.其中一个缺少的是Content-Type.所以看来,如果我可以强制标题输出到流,我可以避免这个问题. 解决方法
你必须通过错误地告诉它有内容来欺骗响应写入标题,然后
suppressing it:
/// [inside the writing block] var didWrite = false; while ((cb = legacyInput.Read(rgb,rgb.Length)) > 0) { didWrite = true; clientOutput.Write(rgb,cb); } if (!didWrite) { // The stream needs a non-zero content length to write the correct headers,but... clientResponse.AddHeader("Content-Length","1"); // ...this actually writes a "Content-Length: 0" header with the other headers. clientResponse.SuppressContent = true; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET Web应用程序的安装
- asp.net-mvc – 如何使输入字段仅允许使用EF和数据注释的数
- 如何在ASP.Net webform中使用标签?
- asp.net – Orchard CMS 1.x [文档存储] – 混合记录支持和
- asp.net-mvc – 绑定到MVC中的SelectList
- 转:[WebServices]介绍
- asp.net-mvc – ASP.NET MVC ViewData和视图模型的最佳实践
- asp.net-mvc – 是否有官方的ASP.NET MVC参考/示例应用程序
- 在servicestack中使用asp.net身份验证
- 在UNC路径上安装ASP.NET应用程序,您认为这可能吗?
推荐文章
站长推荐
- asp.net-mvc – 将Linq2Sql对象传递给Views有什么
- ASP.NET 5 MVC(Visual Studio 2015):一个名为In
- asp.net-mvc-3 – 带有重音IE8的ASP MVC3 FileRe
- asp.net-mvc – 在asp.net mvc中使用IDataErrorI
- asp.net-mvc – 远程验证OnBlur和空字符串
- asp.net – 以纯文本识别URL
- 在ASP.NET中流文件的最佳方式
- asp.net-mvc – 使用ASP.NET MVC中绝对路径访问视
- asp.net-mvc – 如何在Controller外访问RequestC
- asp.net – 如何判断请求是否来自代理?
热点阅读