我们正在使用WebApi v2.1并通过WebApiConfig类中应用的过滤器验证ModelState。
当我们在服务器(Win Server 2008R2)上运行时,错误消息中未列出根据需要指定的字段,但是当我们在本地运行时(在IISExpress上)它们可以正常工作。
请求在本地和服务器上被正确拒绝,但服务器响应未显示缺少的字段。
例如: 如果本地请求缺少必需的abbreviation和issuerName字段,则响应将按预期显示:
{ " message":"请求无效。", " modelState":{ "价值":[ "必需的属性'缩写'在JSON中找不到。路径'',第18行,第2位。", "必需的财产' issuerName'在JSON中找不到。路径'',第18行,第2位。" ] }
当相同的请求发送到服务器时,响应显示:
{ " message":"请求无效。", " modelState":{ "价值":[ "发生了错误。", "发生了错误。" ] } }
我们的过滤器如下:
public class ValidateModelStateAttribute:ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if(!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest,actionContext.ModelState);
} } }
我们的数据模型类使用DataContract属性进行修饰,所需字段的归属如下:
[DataMember(IsRequired=true)]
public string IssuerName
答案 0 :(得分:3)
服务器对于向客户端发送错误更具限制性。尝试在http配置上设置IncludeErrorDetails
标志以验证这是否是潜在问题。
一般情况下,虽然打开此标志并不是最好的主意,但您希望以不同方式序列化错误。
欲了解更多信息: http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx