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; }
}

所以我想知道:

  1. 有什么标准的MVC功能吗?

  2. 如果没有,为什么?

  3. 或者我可能使用了错误的模式来编写代码?

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,但仍然如此。问题是,我是不是做错了什么,所以这有点像重新发明的轮子,而且已经有了这种逻辑的内置功能

asp.net mvc中的通用http结果

如果我正确理解你的问题,你会问如何根据是否遇到异常来返回成功或失败的结果?

您可能希望查看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);
}

据我所知,您基本上是在寻找命令模式。

有一篇很好的文章可以帮助你理解如何实现它。我不能说这是最佳实践,但你可以从中获得一些想法。

其主要思想是创建ICommandHandlerICommandDispatcher接口,帮助您将基本逻辑放置在一个位置。