当 HTTP 响应状态设置为 400 时,IIS 覆盖 HTTP 响应文本

2024-03-05

我正在构建一个带有 IIS 7.5 后端的 MVC 3 应用程序。在我的控制器上,我有允许用户添加/编辑域对象的操作方法。该操作处理 HTTP Post,有一个字符串返回值,其中包含保存过程中遇到的任何验证错误消息。以下是一种操作方法的示例:

    [HttpPost]
    public string CustomerEdit(CustomerModel customerModel)
    {
        var errorMessages = new StringBuilder();
        var serverErrors = new List<string>();

        //Map to a customer domain object
        Mapper.CreateMap<CustomerModel, Customer>();
        var customer = Mapper.Map<CustomerModel, Customer>(customerModel);

        if (customerModel.Oper == "del")
        {
            var customerIds = new List<Guid>();
            customerIds.Add(customer.Id);

            if (!_serverService.DeleteCustomers(customerIds))
            {
                errorMessages.Append("The item could not be deleted");
                Response.StatusCode = Constants.STATUS_SERVER_ERROR;
            }
        }
        else
        {
            //Validate
            if (!_serverService.ValidateCustomer(customer, out serverErrors))
            {
                foreach (var error in serverErrors)
                {
                    ModelState.AddModelError("Validation", error);
                }
            }

            //Save
            if (ModelState.IsValid)
            {
                var saveStatus = _serverService.SaveCustomer(ref customer, _id);

                if (!saveStatus)
                {
                    errorMessages.Append("The server encountered and error during Save");
                    Response.StatusCode = Constants.STATUS_SERVER_ERROR;
                }
            }
            else
            {
                errorMessages.Append(GetValidationErrors(ModelState));
                Response.StatusCode = Constants.STATUS_SERVER_ERROR;
            }
        }
        return errorMessages.ToString();
    }

如果出现错误,我需要将 Response.StatusCode 属性设置为 400/500 的值,并返回详细错误消息的串联字符串。不幸的是,IIS 总是从响应测试中删除我的错误字符串,并且(在出现 400 个错误的情况下)添加将其替换为字符串“Bad Request”

有没有办法将 IIS 配置为在状态代码设置为 400 时返回自定义的、特定于操作的字符串?


在与一位配置 IIS 的高手朋友交谈后,我发现在 IIS 7+ 中,您可以将以下内容添加到 web.config 中:

<system.webServer>
  <httpErrors errorMode="Detailed"/>
</system.webServer>

如果使用 web.config 中的此设置,并且您设置了响应正文,则响应正文将到达客户端。如果您不设置响应正文,则 IIS 将提供详细的错误页面,其中包含详细的错误信息(请参阅http://learn.iis.net/page.aspx/267/how-to-use-http-detailed-errors-in-iis/ http://learn.iis.net/page.aspx/267/how-to-use-http-detailed-errors-in-iis/)。许多人认为这是一个安全风险,因此请谨慎使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 HTTP 响应状态设置为 400 时,IIS 覆盖 HTTP 响应文本 的相关文章

随机推荐