加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 当HTTP响应状态设置为400时,IIS覆盖HTTP响应文

发布时间:2020-12-16 00:27:34 所属栏目:asp.Net 来源:网络整理
导读:我正在使用IIS 7.5后端构建一个MVC 3应用程序。在我的控制器上,我有操作方法允许用户添加/编辑域对象。该操作处理HTTP Post,具有返回值的字符串,其中包含在保存过程中遇到的任何验证错误消息。以下是一个操作方法的示例: [HttpPost] public string Custo
我正在使用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’

当状态码设置为400时,是否有办法配置IIS返回自定义的Action特定字符串?

解决方法

在与我的一位朋友交谈后,我发现在配置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/)。许多人认为这是一个安全隐患,所以谨慎使用。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读