gpt4 book ai didi

javascript - SignalR:在属性完好无损的 Javascript 客户端上捕获服务器异常

转载 作者:行者123 更新时间:2023-11-29 18:24:18 24 4
gpt4 key购买 nike

我通过这种方法在服务器端集线器上获得了一个简单示例:

    public int CanThrowException(int input)
{
if (0==input)
throw new ArgumentOutOfRangeException("input", "was zero");
return -input;
}

在客户端上:

$.connection.testHub.server.canThrowException(0).fail(function (x)
{
console.log(x);
});

现在,当我检查 x 时,我得到的是一个包含参数名称和我的消息的字符串。

我正在寻找的是一种获取反射(reflect)服务器端异常属性的实际 Javascript 对象的方法。因此,在给定的情况下,它应该具有属性 messageactualValueParamName

我为什么要这个?因为我想编写通常会返回对象的服务器端代码,但在某些情况下会抛出一个异常,其中包含有关错误的详细信息,这反过来在我的场景中向用户展示是绝对有意义的(实际上,它不是有道理,有必要)。

当然,我可以在服务器端捕获异常时调用一些 client.caller.OnErrorThisAndThat() 方法。但是,这会使我的 JavaScript 代码更加复杂,因为我必须保持状态我最后调用了哪个服务器端方法,挂接到该回调并在这两者之间建立连接。

那么有没有办法在 JavaScript 客户端上获取类型化异常代理?如果没有,除了提到的 event-sorta-mess 之外,有什么想法可以在没有它们的情况下实现我想要的目标吗?

最佳答案

在您可能会抛出错误的中心方法周围放置一个 try catch 语句。

服务器抛出时在客户端调用方法:

public int CanThrowException(int input)
{
try
{
if (0==input) {
throw new ArgumentOutOfRangeException("input", "was zero");
}
return -input;
}
catch(Exception e)
{
Clients.Caller.ErrorOnServer(e);
}
}

返回错误对象:

public object CanThrowException(int input)
{
try
{
if (0==input) {
throw new ArgumentOutOfRangeException("input", "was zero");
}
return -input;
}
catch(Exception e)
{
return e;
}
}

这两种方法都会让您在客户端获得具有相应属性的错误对象。但是,如果这是面向客户的应用程序,我建议不要使用此方法。如果可以避免,将异常暴露给客户从来都不是一件好事。

希望这对您有所帮助!

关于javascript - SignalR:在属性完好无损的 Javascript 客户端上捕获服务器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com