【发布时间】:2016-02-22 05:05:31
【问题描述】:
将 HTTPS 与 IISExpress 10 和 VS2015 Web api 控制器一起使用时,将不会发回 HttpResponseMessage 的 ReasonPhrase。如果我通过 HTTP 连接它可以正常工作,但 HTTPS 只是清除了原因。当部署到 azure 时,这不会发生(https 按预期工作),它只发生在我的本地机器上。
您可以通过创建一个支持 web api 的新 mvc 应用程序来重现这一点,框架 4.5.2。创建一个新的 web api 控制器(它将对 mvc 控制器和 HttpStatusCodeResult 执行相同的操作)并添加一个 post 命令,例如:
public HttpResponseMessage Post()
{
var ret = new HttpResponseMessage((HttpStatusCode)270) { ReasonPhrase = "Test reason phrase", Content = new StringContent("test content") };
return ret;
}
我用邮递员来测试它。通过 http 状态将是
270 测试原因短语
通过 HTTPS 就可以了
270 正常
您可以设置断点并查看 ret 设置是否正确,无论请求来自何处,因此 IIS 中的某些内容会覆盖 HTTPS 上的 ReasonPhrase。
我尝试将 web.config 中的 httpErrors 设置为 errorMode 和 existingResponse 的几乎所有组合。我的 machine.config(适用于任何版本的 .net)未在任何地方设置为零售。 .vs 中的 application.config 将 httpErrors 设置为 overrideModeDefault="Allow"。
我想不出也找不到任何其他关于修改设置的建议。这只是 iisexpress 的错误/限制吗?还是我缺少一些神奇的设置?
更新:
我用 windows 10 和 VS2015 制作了一个虚拟机来测试。结果相同。我还在 VM 上启用了 IIS(普通 IIS)并发布到它。结果也一样。
我还将状态代码更改为 570 只是为了好玩,它给出了相同的结果,“570 OK”我觉得很有趣,因为 5xx 不被视为成功代码,所以我预计会有一些不同于 OK 的结果。
【问题讨论】:
-
您好 jneta,我在 Windows 2016 中遇到了同样的问题(HTTP 将显示正确的 ReasonPhrase,HTTPS 将显示 OK)。它将在 Windows 2012 R2 中运行。我们的 WebAPI 可能会生成 4xx 错误代码,我们希望查询 ReasonPhrase 以向用户显示更好的消息。一年多以前,我还关注了您的 IIS 论坛 link。有人有我们可以尝试的建议吗?提前谢谢你。
-
由于这似乎是由 IIS 10 默认使用的 HTTP/2 引起的,您可以尝试禁用它。 stackoverflow.com/questions/44660634/… 请注意,我还没有尝试过。我最终不再使用 ReasonPhrase,只是用我的数据传回消息。
标签: asp.net asp.net-web-api iis-express