我正在构建一个带有 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(使用前将#替换为@)