1

有没有办法一般处理 404(找不到资源),还是我必须为每个操作编写逻辑?我目前正在做的一个简单示例:

    //single-read
    public HttpResponseMessage Get(Guid guid)
    {
        School school = new School(guid);

        if (school == null)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
            //bonus-question: would it be better to instead: throw new HttpResponseException(HttpStatusCode.NotFound);
        }

        //bonus-bonus-question: what is the benefit of using a typed response?
        return Request.CreateResponse<School>(HttpStatusCode.OK, school);
    }

如果可能的话,我希望在其他地方处理“未找到”逻辑,这样我就不需要为每个操作重复检查那几行。例如,如果它可以简化为:

    //single-read
    public HttpResponseMessage Get(Guid guid)
    {
        School school = new School(guid);
        return Request.CreateResponse<School>(HttpStatusCode.OK, school);
    }
4

1 回答 1

1

你可以IActionFilter在你的控制器上实现一个,每当一个动作即将被执行以及一个动作完成执行时,它都会被调用。然后,您可以在那里执行您的检查逻辑。请参阅文档。您将使用过滤器对控制器类本身进行注释,并且所有操作都会调用它。

在错误处理方面,如果您不抛出异常,那么您将不会支付异常的成本(我想假装可以忽略不计),但更重要的是,您不会允许任何异常处理程序开始,这可能是你真正想要的。看一下IExceptionFilter每当抛出异常时都会调用的例子。如果您的应用程序的一部分依赖于它(例如记录错误),那么当您不引发异常时,该组件将不会知道存在错误,因此这是一个设计调用。

于 2013-09-16T03:27:13.437 回答