asp.net mvc

时间:2015-11-18 12:09:11

标签: c# .net asp.net-mvc

我已经参与了几个MVC项目,几乎所有项目中我都看到了类似的逻辑。

我们经常返回这样的对象:

public class HttpPrjNameResult<T> {
    public PrjNameStatus Status { get; set; }
    public string Message { get; set; }
    public T data{ get; set; }
}

所以我想知道:

  1. 是否有任何标准的MVC功能?

  2. 如果不是 - 为什么?

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

  4. UDPATE: 我会稍微更新一下问题。 让我们说我用方法UpdateReports创建web api,它返回更新实体的列表:

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

据我所知,你基本上在寻找Command pattern

有一个good article可以帮助您了解实现它的方法之一。我不能说这是最好的做法,但你可以从中得到一些想法。

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