在 Web API 中使用 ExceptionFilterAttribute

2024-04-19

我正在尝试在创建的 Web API 中实现错误处理,需要以 JSON 格式返回异常详细信息。我创建了 BALExceptionFilterAttribute 像

public class BALExceptionFilterAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        base.OnException(actionExecutedContext);
        actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.BadRequest, new { error = actionExecutedContext.Exception.Message });
    }
}

并在 Global.asax.cs 中注册它们,例如

GlobalConfiguration.Configuration.Filters.Add(new BALExceptionFilterAttribute());

在我的控制器中我想抛出异常

    [HttpGet]
    [BALExceptionFilter]
    public HttpResponseMessage Getdetails(string ROOM, DateTime DOB_GT)
    {
        if (string.IsNullOrEmpty(ROOM) 
        {
            return Request.CreateResponse(new { error = "Input paramete cannot be Empty or NULL" });
        }
            //throws the exception
            throw new BALExceptionFilterAttribute();

            List<OracleParameter> prms = new List<OracleParameter>();
            List<string> selectionStrings = new List<string>();
            prms.Add(new OracleParameter("ROOM", OracleDbType.Varchar2, ROOM, ParameterDirection.Input));
            prms.Add(new OracleParameter("DOB_GT", OracleDbType.Date, DOB_GT, ParameterDirection.Input));
            string connStr = ConfigurationManager.ConnectionStrings["TGSDataBaseConnection"].ConnectionString;
            using (OracleConnection dbconn = new OracleConnection(connStr))
            {
                DataSet userDataset = new DataSet();
                var strQuery = "SELECT * from LIMS_SAMPLE_RESULTS_VW where ROOM = :ROOM and DOB > :DOB_GT ";
                var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) };
                var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
                ContentDispositionHeaderValue contentDisposition = null;
                if (ContentDispositionHeaderValue.TryParse("inline; filename=TGSData.json", out contentDisposition))
                {
                    response.Content.Headers.ContentDisposition = contentDisposition;
                }
                return response;
               }
        }

但它显示错误,如throw new BALExceptionFilterAttribute(); Error 1 The type caught or thrown must be derived from System.Exception


//throws the exception
throw new BALExceptionFilterAttribute();

这将产生编译器错误。异常过滤器属性是在发生异常时执行某些操作,以便您可以以通用方式处理它,例如重定向到错误页面或在 json 响应中发回通用异常消息等。异常过滤器属性本身不是异常,它处理异常。

So throw new BALExceptionFilterAttribute();无效,因为BALExceptionFilterAttribute也不例外。

如果你想要一个BALException输入然后创建一个。

public class BALException : Exception { /* add properties and constructors */}

现在你可以扔它了

throw new BALException();

然后你可以配置BALExceptionFilterAttribute如果此异常到达过滤器(未在控制器中捕获),则执行某些操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Web API 中使用 ExceptionFilterAttribute 的相关文章

随机推荐