The*_*ght 19 iis-7.5 asp.net-mvc-3
我正在使用IIS 7.5后端构建MVC 3应用程序.在我的控制器上,我有一些允许用户添加/编辑域对象的操作方法.Action处理HTTP Post,其返回值为string,其中包含在保存过程中遇到的任何验证错误消息.以下是一个Action方法的示例:
    [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的字符串?
The*_*ght 19
在与我的朋友交谈后,我发现在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-错误在iis /).许多人认为这是一种安全风险,因此请谨慎使用.
jst*_*ant 14
在MVC中,也可以在Action by Action的基础上执行此操作.请参阅TrySkipisCustomErrors.
使用:
Response.TrySkipIisCustomErrors = true;
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return this.Json(SomeJsonObject);  // could output string too