当前位置: 首页 > 知识库问答 >
问题:

通过JsonResult返回错误,但没有附加[]

相野
2023-03-14
    $.ajax({
    type: "GET",
    url: "/Controller/JsonResultActionMethod",
    dataType: "json",
    data: { someVar: someData },
    cache: false,
    success: function (results) {
        // Do some stuff
    },
    error: function (xhr, status, error) {
        alert(xhr.responseText);
    }
});
    [HttpGet]
    public JsonResult JsonResultActionMethod(string someVar)
    {
        var myObjects = GetObjects(someVar);
        return Json(myObjects , JsonRequestBehavior.AllowGet);
    }
    private List<myObject> GetObjects(string someVar)
    {
        var myObjList = new List<InspectionModel>();

        try
        {
            // call stored procedure, create new instance of object, and load up myObjList. All of this works just fine
        }
        catch (OracleException ex)
        {
            // error handling is a bit more robust. simplified for example. ex.Message, when returned to page and displayed via xhr.responseText will appear as such: "Some error message from Oracle[]"
            Response.Write(ex.Message);
        }

        return disasterList;
    }

是否有一种方法可以将catch{}以序列化为JSON对象的方式从catch{}返回错误消息?我考虑向myObject添加一个List属性,并在其中存储错误。有没有更好的办法做到这一点?

共有1个答案

白越
2023-03-14

这实际上是一个很好的问题,因为它与一般的API设计有关。我还没能找到解决这个问题的“最佳”办法。但是我会创建一个BaseResponse类,其中包含一个异常字段,然后是实际的对象本身。像这样:

public class BaseResponse<T> {
    public T Data { get; set; }
    public Exception Error { get; set; }

    public object GetResponse() {

        //If an exception has not been thrown then just return your data
        if(Error == null)
            return Data;

        //If an exception has been thrown, return the exception
        return Error;
    }
}  

然后可以从控制器中使用这个BaseResponse类。

[HttpGet]
public JsonResult GetObjects(string someVar)
{
    var response = BaseResponse<InspectionModel>();

    try {
        response.Data = GetObjects(someVar);
    }
    catch(Exception e) {
        response.Error = e;
    }

    return Json(response.GetResponse() , JsonRequestBehavior.AllowGet);
}

有很多更好的方法来包装所有这些使用过滤器。然后所有这些都可以在后台发生,您不必到处重复这段代码。

 类似资料:
  • 问题内容: 我有一个返回内部服务器错误(500)的php应用程序时出现问题,但错误日志中未显示任何内容。 现在,我知道我要运行的内容有错误,我知道缺少某些文件,但没有丢失,但是应该在apache错误日志中显示某些内容(否则,我应该如何确切知道丢失的内容)。 我创建了一个测试脚本,该脚本在相同的vhost配置下出错,并且这些错误显示得很好,因此一切似乎都已正确配置到php / apache。是否有某

  • 在try/catch块中有三个sql查询。Autocommit是关闭的,并且所有三个查询都没有错误地运行,我已经验证了这一点(如果任何查询失败,它应该不会到达commit行,但是我已经通过xdebug验证了它,一次单步执行代码一行)。当代码到达commit()函数调用时,mysqli返回false,但没有错误消息。当前面的查询都工作时,提交怎么会失败呢? 代码基本上是这样的:

  • 问题内容: 以下代码似乎不起作用,即使该文件看起来很好也是如此。 在此先感谢您的帮助。 编辑:结果是我试图去Graphics.drawImage(images [0]);,它给了我一个空指针异常。这段代码可以很好地完成。 编辑:更改按建议移动if(!file.exists()),并将文件包装在输入流中。 问题答案: ImageIO.read(file); 如果找不到注册的 ImageReader,

  • 我订阅了Firebase Project,以便通过Web发送通知。 我准备了一个HTML页面来允许通知并获取实例ID令牌。一旦得到这个I.I.令牌,我就使用“REST控制台”发出POST请求来发送我的第一个通知。 以上是有关请求的更多信息: 让我解释一些密钥: -授权头:密钥是Firebase控制台中的服务器密钥。 -JSON中的“to”字段是我请求使用通知权限的HTML页面中出现的实例ID令牌。

  • 加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur

  • 我正在实现房间数据库。这是我的POJO类 这是DAO类 在运行我的代码时,我收到以下错误