【发布时间】:2018-05-15 11:09:14
【问题描述】:
我在 .NET 中有一个 RESTful 服务,我希望所有操作都返回 JsonResult 类型的对象,JsonResult 是我这样定义的对象:
public class JsonResult<T>
{
public Notify Notify {get; set;}
public T Data {get; set;}
public static CreateResponse(T Data, Notify Notify = null, HttpStatusCode Code = HttpStatusCode.OK)
{
//Code param not manage, at the moment
return new JsonResult<T>
{
Data = Data,
Notify = Notify
};
}
}
public class Notify
{
public string Message {get; set;}
public Severity Severity {get; set;}
}
public enum Severity
{
Error,
Info,
Warning,
Fatal,
}
所以目前我的动作是这样的:
public JsonResult<string> Get()
{
return JsonResult<string>.CreateResponse("Ciao Mondo!");
}
它有效,我喜欢这种形式,因为当我阅读公司时,我已经知道我想要返回给客户的内容(JsonResult,T 是我的数据类型)......但问题是当我想要管理状态码。
在创建这个新项目之前,为了管理状态码,我使用了 HttpResponseMessage 和方法 Request.CreateResponse 来向客户端返回一些数据:
public HttpResponseMessage Get()
{
return Request.CreateResponse(HttpStatusCode.BadRequest, "Ciao Mondo!");
}
但我不喜欢这样,因为知道返回的类型不是立即的。
所以...我的问题是...如何将状态代码管理到我的 JsonResult.CreateResponse(T, Notify[, HttpStatusCode]) 方法中?
这个方法被移动到一个 CustomApiController(从 ApiController 继承),所以我有 HttpContext 和 Request 可用。
非常感谢大家
【问题讨论】:
-
如果您要返回响应,则意味着请求找到了所请求的实体,因此唯一合理的状态码是 200。除了 200 OK,您还想返回哪个状态码为什么?
-
它并不总是正确的......如果我不能(出于一千个原因)执行我的代码的一部分,我想管理错误而不是将其扔给客户端。例如:我发现了一个超时,我想生成一个解释它的通知,这并不能说我有一个很好的响应并且我的请求得到了满足。
标签: c# .net asp.net-mvc asp.net-web-api