[英]ASP.NET Core Web API response - status codes vs custom object
我在我的 Web API 项目中实现了Response
逻辑,响应对象如下所示:
public class Response
{
public bool IsSuccess { get; set; }
public object Data { get; set; }
public string Message { get; set; }
}
IsSuccess
指示调用是成功还是失败。Data
为true
时用于进一步处理的IsSuccess
Message
为false
时用于进一步处理的IsSuccess
我有几个问题。 请帮我解决一下这个。
ControllerBase
返回方法吗?HTTP 状态码是一种标准。 参见例如这个文档。 没有人期望在 IsSuccess 设置为 false 的情况下获得 200 OK,因为 200 OK 表示成功。 3xx 是重定向,4xx 是客户端错误,5xx 是服务器错误。 坚持这一点,不要重新发明轮子,你会混淆你的 API 的客户端。
但是,您可以在回复中包含更多自定义信息,而且这是一种很好的做法。 定义您的响应,例如:
public class ErrorDetails
{
public string Message { get; set; }
}
比直接在.net的响应对象上设置响应代码,而不是你自己:
var error = new ErrorDetails { ... };
context.Response.StatusCode = 4xx / 5xx; // and not 200, it's an error! context is HttpContext
await context.Response.WriteAsync(JsonConvert.SerializeObject(error));
控制器方法已经为此提供了内置方法,因此也无需像上面的示例中那样艰难地进行操作。 例如:
this.BadRequest(error);
这将在响应对象上设置 404 并将您的错误对象作为附加数据传递到有效负载中。 每种情况都有 this.Ok() 和一堆其他方法。
HTTP 已经标准化了表示请求和响应的结构。 在这种情况下,响应包含 3 个部分 - 状态、标题和正文。 请参考这里。 每个部分都有明确的目的。 由于问题是关于状态码的,我会限制自己。
状态码的主要目的是表明请求是否被正确处理。 自动化系统和脚本依赖于它来分支他们的决策。
重要的是要记住,定义的模型将成为响应主体的一部分。 这意味着构建的框架 API 仍将包含默认响应代码 - 通常,它是 200 OK。 如果 IsStatus 属性应该充当状态代码的替代品,如果不采取适当的措施,当 API 出错时,状态代码和 IsStatus 可能会显示不同的值。
最后,我认为你最好用一个 ErrorResponse 来代替。 有点像——
public class ErrorResponse{
// Application or Service specific code
// to identify the error
public string Code {get; set;}
// A link to detailed description of the
// of the error
public Uri Info {get; set;}
// A high level friendly message about the
// error
public string Message {get; set;}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.