c# - 根据客户端接收不同的响应

标签 c# asp.net-mvc

我有两个 ASP.NET MVC 网络应用程序在同一台服务器上运行。其中之一是 Web 服务,如果发生异常,它会以纯文本形式返回错误消息。但是,现在,一些调用 Web 服务的客户端不会收到错误消息;相反,他们只会收到 HTML 格式的“错误请求”。

第二个网络应用程序(与第一个网络应用程序位于同一服务器上)可以调用第一个网络应用程序处理的 URL,并且现在可以正确接收纯文本格式的错误消息。但是,我尝试以其他方式调用该 URL,所有这些都导致收到“错误请求”:

  • 将 URL 粘贴到我计算机上的 Chrome 中
  • 将 URL 粘贴到服务器上的 IE 中
  • 从与服务器不同的计算机上的网络应用程序调用 URL

此错误不会在本地发生。当我在我的计算机上运行 2 个网络应用程序时,我从第二个网络应用程序和从 Chrome 调用本地 URL 收到纯文本错误消息。

我已将有问题的代码行缩小到以下 ActionResult 片段的第一行:

Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Content(errorMessage, ContentTypes.PlainText);

删除第一行似乎可以解决问题;但是,这也消除了我使用描述性状态代码的能力。在我看来,如果 (a) 客户端在另一台计算机上或 (b) 客户端是网络,则返回 ActionResult 后响应将被拦截浏览器。所以我想我有一个由两部分组成的问题:

  1. .NET 或 IIS 是否会根据客户端类型或位置拦截和更改响应?
  2. 是否有一种简单的方法可以在这段代码和将响应发送给客户端之间的任何时间点查看响应?

谢谢!


更新:我更改了网络应用程序以使用 HttpResponseException。现在我收到以下 YSOD 异常:

Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.

使用 MVC 版本 5,Visual Studio 2013。ActionResult 的代码如下所示:

MyImage image = new MyImage(parameters);

if (image.Errors.Any())
{
    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest) { Content = new StringContent(image.Error) });
}

return File(image.AsJpeg(), ContentTypes.Jpeg);

有人知道如何绕过这种无用的响应吗?


更新 2: 事实证明,由于 Web.config 设置 system.webServer > httpErrors > errorMode,错误消息被抑制了。它的默认值为“DetailedLocalOnly”,并且在某些情况下似乎出于我不知道的原因被调用(尽管 this question 可能会开始阐明一些问题)。一旦我把它改成这个,它就按我预期的那样工作了:

<httpErrors errorMode="Detailed" />

我理解为什么他们在远程机器上默认抑制错误消息,但这比我想象的要难得多。无论如何,我希望这对将来的某个人有所帮助。

最佳答案

我想不出 IIS 会关心哪个客户端调用服务的任何原因。我的猜测是客户端向服务器发送的请求与您认为发送的请求不同。您可以使用名为“Fiddler”的程序验证这一点。

此外,我建议在从 Web API 调用发回信息时遵循这样一种返回 HttpResponseMessage 的模式:

return new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            ReasonPhrase = message,
            Content = new StringContent(string.Format("{0}", exception))
        };

关于c# - 根据客户端接收不同的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611561/

相关文章:

c# - 将文件夹中包含的所有图像上传到数据库 ASP MVC 4 Razor

javascript - MVC - 链接到另一个 Controller /操作时出现问题

javascript - 如果在一页 mvc 上登录,则从所有页面注销用户

c# - 如何在 ASP.NET MVC 中获取客户端的 IP 地址?

c# - 我可以为 Mac 计算机构建 .net 解决方案文件吗

抽象方法中的 C# 可选参数

c# - 如何为从组合框中选择的项目声明一个 c# 变量

javascript - 两个水平滚动条

c# - 如何将 SQL Server 过程变量设置为从 C# ASP.NET MVC 程序输入的数据?

c# - NullReferenceException 未处理 - 什么是 null?