Asp.net web api Web Api中的自定义错误响应

Asp.net web api Web Api中的自定义错误响应,asp.net-web-api,Asp.net Web Api,在Web API控制器上,我具有以下功能: if (!ModelState.IsValid) return BadRequest(); 请求: 我想创建一个自定义错误消息,将错误作为json传递 比如: if (!ModelState.IsValid) return ModelHasErrors(errors); 如何创建自定义错误响应?您可以直接返回所需的任何对象,并将其序列化为JSON。它甚至可以是使用new{} 在客户端,您必须检查是否收到了常规响应或错误对象,这可以通过检查自

在Web API控制器上,我具有以下功能:

if (!ModelState.IsValid)
  return BadRequest();
请求:

我想创建一个自定义错误消息,将错误作为json传递

比如:

if (!ModelState.IsValid)
  return ModelHasErrors(errors);

如何创建自定义错误响应?

您可以直接返回所需的任何对象,并将其序列化为JSON。它甚至可以是使用
new{}


在客户端,您必须检查是否收到了常规响应或错误对象,这可以通过检查自定义错误对象的某些属性来轻松完成。

您可以直接返回您想要的任何对象,并将其序列化为JSON。它甚至可以是使用
new{}


在客户端,您必须检查是否收到了常规响应或错误对象,这可以通过检查自定义错误对象的某些属性来轻松完成。

您可以直接返回您想要的任何对象,并将其序列化为JSON。它甚至可以是使用
new{}


在客户端,您必须检查是否收到了常规响应或错误对象,这可以通过检查自定义错误对象的某些属性来轻松完成。

您可以直接返回您想要的任何对象,并将其序列化为JSON。它甚至可以是使用
new{}


在客户端,您必须检查是否收到了常规响应或错误对象,这可以通过检查自定义错误对象的某些属性来轻松完成。

您可以使用包含错误消息的对象返回
HttpResponseMessage
(在本例中为
errors
)作为内容:

return new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new ObjectContent(typeof(ErrorClass), errors, new JsonMediaTypeFormatter())
        };
可以找到有关如何返回操作结果的更多信息

显然,您可以通过创建一个方法并像示例中那样调用它来重用上述代码:
modelhasrerrors(errors)


但是,如果您经常发现自己返回相同的响应,一个不错的选择是创建一个自定义异常筛选器,该筛选器将在
ModelState.IsValid
为false时返回相同的响应。

您可以使用包含错误消息的对象返回
HttpResponseMessage
(在本例中为
错误
)作为内容:

return new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new ObjectContent(typeof(ErrorClass), errors, new JsonMediaTypeFormatter())
        };
可以找到有关如何返回操作结果的更多信息

显然,您可以通过创建一个方法并像示例中那样调用它来重用上述代码:
modelhasrerrors(errors)


但是,如果您经常发现自己返回相同的响应,一个不错的选择是创建一个自定义异常筛选器,该筛选器将在
ModelState.IsValid
为false时返回相同的响应。

您可以使用包含错误消息的对象返回
HttpResponseMessage
(在本例中为
错误
)作为内容:

return new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new ObjectContent(typeof(ErrorClass), errors, new JsonMediaTypeFormatter())
        };
可以找到有关如何返回操作结果的更多信息

显然,您可以通过创建一个方法并像示例中那样调用它来重用上述代码:
modelhasrerrors(errors)


但是,如果您经常发现自己返回相同的响应,一个不错的选择是创建一个自定义异常筛选器,该筛选器将在
ModelState.IsValid
为false时返回相同的响应。

您可以使用包含错误消息的对象返回
HttpResponseMessage
(在本例中为
错误
)作为内容:

return new HttpResponseMessage(HttpStatusCode.BadRequest)
        {
            Content = new ObjectContent(typeof(ErrorClass), errors, new JsonMediaTypeFormatter())
        };
可以找到有关如何返回操作结果的更多信息

显然,您可以通过创建一个方法并像示例中那样调用它来重用上述代码:
modelhasrerrors(errors)

但是,如果您经常发现自己返回相同的响应,一个不错的选择是创建一个自定义异常筛选器,每当
ModelState.IsValid
为false时,该筛选器将返回相同的响应。

最简单的方法是

return Request.CreateErrorResponse(HttpStatusCode.NotFound, ModelState);
我习惯于使用表示错误响应的特殊对象。我可以添加我的特定(翻译)消息、状态代码等

public class ErrorModel
{
    public ErrorModel(HttpStatusCode statusCode, string message)
    {
        StatusCode = (int)statusCode;
        Message = message;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public ErrorModel(HttpStatusCode statusCode)
    {
        StatusCode = (int)statusCode;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public string Message { get; set; }
    public int StatusCode { get; set; }
    public Dictionary<string, ModelErrorCollection> ValidationErrors { get; set; }
    public Exception Exception { get; set; }
}
最后,在我的控制器中,我只需调用:

return Request.CreateCustomResponse(HttpStatusCode.NotFound, ApiHttpResultMessages.NotFound);
你可以在我的CodePlex项目Web API设计中找到灵感:

最简单的方法是

return Request.CreateErrorResponse(HttpStatusCode.NotFound, ModelState);
我习惯于使用表示错误响应的特殊对象。我可以添加我的特定(翻译)消息、状态代码等

public class ErrorModel
{
    public ErrorModel(HttpStatusCode statusCode, string message)
    {
        StatusCode = (int)statusCode;
        Message = message;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public ErrorModel(HttpStatusCode statusCode)
    {
        StatusCode = (int)statusCode;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public string Message { get; set; }
    public int StatusCode { get; set; }
    public Dictionary<string, ModelErrorCollection> ValidationErrors { get; set; }
    public Exception Exception { get; set; }
}
最后,在我的控制器中,我只需调用:

return Request.CreateCustomResponse(HttpStatusCode.NotFound, ApiHttpResultMessages.NotFound);
你可以在我的CodePlex项目Web API设计中找到灵感:

最简单的方法是

return Request.CreateErrorResponse(HttpStatusCode.NotFound, ModelState);
我习惯于使用表示错误响应的特殊对象。我可以添加我的特定(翻译)消息、状态代码等

public class ErrorModel
{
    public ErrorModel(HttpStatusCode statusCode, string message)
    {
        StatusCode = (int)statusCode;
        Message = message;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public ErrorModel(HttpStatusCode statusCode)
    {
        StatusCode = (int)statusCode;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public string Message { get; set; }
    public int StatusCode { get; set; }
    public Dictionary<string, ModelErrorCollection> ValidationErrors { get; set; }
    public Exception Exception { get; set; }
}
最后,在我的控制器中,我只需调用:

return Request.CreateCustomResponse(HttpStatusCode.NotFound, ApiHttpResultMessages.NotFound);
你可以在我的CodePlex项目Web API设计中找到灵感:

最简单的方法是

return Request.CreateErrorResponse(HttpStatusCode.NotFound, ModelState);
我习惯于使用表示错误响应的特殊对象。我可以添加我的特定(翻译)消息、状态代码等

public class ErrorModel
{
    public ErrorModel(HttpStatusCode statusCode, string message)
    {
        StatusCode = (int)statusCode;
        Message = message;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public ErrorModel(HttpStatusCode statusCode)
    {
        StatusCode = (int)statusCode;
        ValidationErrors = new Dictionary<string, ModelErrorCollection>();
    }

    public string Message { get; set; }
    public int StatusCode { get; set; }
    public Dictionary<string, ModelErrorCollection> ValidationErrors { get; set; }
    public Exception Exception { get; set; }
}
最后,在我的控制器中,我只需调用:

return Request.CreateCustomResponse(HttpStatusCode.NotFound, ApiHttpResultMessages.NotFound);

你可以在我的CodePlex项目Web API设计中找到灵感:

你不显示什么是ModelErrorCollection?你不显示什么是ModelErrorCollection?你不显示什么是ModelErrorCollection?你不显示什么是ModelErrorCollection?