返回错误消息与抛出异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了返回错误消息与抛出异常相关的知识,希望对你有一定的参考价值。

我正在为asp.net mvc项目编写一个类库。类库将返回实体并执行基本功能。在上一个项目中,我使用了这样的逻辑:

public class MyClassLibrary

     public Response<ResponseMessage, MyEntity> GetMyEntity()
     
         //Some code
     
     public ResponseMessage SaveMyEntity(MyEntity e)
     
         //Some code
     

public class BaseController:Controller

    public ActionResult JsonDataSourceRequest<T>(Func<Response<ResponseMessage, List<T>>> operation, [DataSourceRequest] DataSourceRequest request)
    
        try
        
            Response<ResponseMessage, List<T>> ret = operation();
            if (ret.message.type == ReturnType.OK)
            
                return Json(ret.result.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
            
            else
                return ConvertToJson(ret.message);

        
        catch (Exception ex)
        
            ResponseMessage m = new ResponseMessage();
            m.type = ReturnType.ERROR;
            m.text = ex.text;
            return ConvertToJson(m);
        
    

    public ActionResult PartialView<T>(Func<Response<ResponseMessage, T>> operation)
    
        //Some code
    

    public ActionResult Action(Func<ResponseMessage> operation)
    
        //some code
    

[CustomAuthorize]
public class MyController : BaseController

    public ActionResult MyEntityRead([DataSourceRequest] DataSourceRequest request)
    
        return base.JsonDataSourceRequest(() =>
        
            return MyEntityService.GetAll();
        , request);
    

这里为了使用BaseController的功能,我总是返回响应要么ResponseMessage

现在,我认为我可以拥有自定义的异常类,而不是从所有方法中返回ResponseMessage,我可以抛出这些异常。

我想知道这是否是一个好习惯。

提前感谢。

答案

我想知道这是否是一种好习惯。

否,抛出异常以处理非异常流是错误的设计。抛出异常是有代价的,如果可以按正常流程处理案件,则应避免使用它们。

另一答案

如果有特殊情况,您应该抛出异常。如果某些情况是预期的情况,则应使用返回值。只有您知道哪种情况适用于您的情况。

另一答案

“引发异常,而不返回错误代码

异常确保不会因调用代码未检查返回代码而引起注意。“

https://docs.microsoft.com/en-us/dotnet/standard/exceptions/best-practices-for-exceptions

以上是关于返回错误消息与抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL编程中的异常处理-异常捕获(try catch)与抛出异常(throw)

异常捕获处理与抛出

Servlet 异常处理( 配置错误页面)

Servlet异常处理

servlet 异常处理

C++Primer_笔记_异常处理