asp.net mvc中的通用http结果
本文关键字:http 结果 net mvc asp | 更新日期: 2023-09-27 18:22:26
我已经参与了几个MVC项目,在几乎所有项目中,我都看到了一些操作的类似逻辑。
我们经常返回这样的对象:
public class HttpPrjNameResult<T> {
public PrjNameStatus Status { get; set; }
public string Message { get; set; }
public T data{ get; set; }
}
所以我想知道:
有什么标准的MVC功能吗?
如果没有,为什么?
或者我可能使用了错误的模式来编写代码?
UDPATE:我会稍微更新一下这个问题。假设我正在创建web api,方法是UpdateReports,它返回更新实体的列表:
public HttpTestResult<List<Report>> UpdateReports(IEnumerable<Reports> reports){
try{
var res = SaveReports(reports);
return new HttpTestResult<List<Report>>{
Status = TestStatus.Success,
Data = res
}
}
catch(Exception e){
logger.Error(e);
return new HttpTestResult<Object>{
Status = TestStatus.Error,
Message = "Error while saving reports"
}
}
}
我认为这种逻辑在整个项目中都很有用,我想更多的是API风格,而不是纯粹的mvc,但仍然如此。问题是,我是不是做错了什么,所以这有点像重新发明的轮子,而且已经有了这种逻辑的内置功能
如果我正确理解你的问题,你会问如何根据是否遇到异常来返回成功或失败的结果?
您可能希望查看IExceptionFilter(MVC)或IExceptionFilter(Http)接口。这些过滤器将监听任何异常,并执行您定义的一些自定义操作,例如(MVC示例):
public void OnException(ExceptionContext filterContext)
{
//perform some custom action, e.g. logging
_logger.Log(filterContext.Exception);
//return a particular status
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
如果你使用异常过滤器来处理任何发生的异常,你的控制器可以自由地专注于成为控制器:
[ResponseType(typeof (List<Report>))]
public IHttpActionResult UpdateReports(IEnumerable<Reports> reports)
{
var results = SaveReports(reports).ToList();
return Ok(results);
}
据我所知,您基本上是在寻找命令模式。
有一篇很好的文章可以帮助你理解如何实现它。我不能说这是最佳实践,但你可以从中获得一些想法。
其主要思想是创建ICommandHandler
和ICommandDispatcher
接口,帮助您将基本逻辑放置在一个位置。