gpt4 book ai didi

signalr - 在服务器上处理异常,在客户端自定义失败参数

转载 作者:行者123 更新时间:2023-12-04 20:46:44 25 4
gpt4 key购买 nike

如果服务器上发生异常,我希望能够自定义传递给客户端的错误对象。

我在客户端上使用“then”函数来处理成功和失败:

hub.server.login(username, password).then(function(result) {
// use 'result'
}, function(error) {
// use 'error'
});

如果登录成功,'result' 是服务器上 Login 方法的返回值。如果登录失败,我会抛出“CustomException”异常。这是具有“代码”属性的异常(exception)。
if (!IsValidLogin(username, password))
throw new CustomException { Code: "BADLOGIN", Message: "Invalid login details" };

如果我启用了详细异常,则客户端上的“错误”参数为“无效登录详细信息”——异常的 Message 属性。

有什么方法可以有选择地将错误结果从字符串更改为复杂对象?即,如果在集线器方法中抛出“CustomException”,则为客户端失败处理程序返回一个 {Code:[...], Message:[...]} 对象?

这应该证明我希望在客户端上看到的内容:
hub.server.login(username, password).then(function(userInfo) {
alert("Hello " + userInfo.Name);
}, function(err) {
if (err.Code === "BADLOGIN.USERNAME")
alert("Unrecognised user name");
else if (err.Code === "BADLOGIN.PASSWORD");
alert("Invalid password");
else
alert("Unknown error: " + err.Message);
});

(注意 'err' 上的 'Code' 和 'Message' 属性)。

最佳答案

当您调用 MapHubs 并将 EnabledDetailedErrors 设置为 true 时,如下所示:

RouteTable.Routes.MapHubs(new HubConfiguration { EnableDetailedErrors = true });

您将收到异常消息字符串作为失败处理程序的参数。

我看到您已经弄清楚了这一点,但我包含了服务器端代码,以便为以后可能会发现此问题的任何其他人启用详细错误。

不幸的是,没有简单的方法可以将复杂对象发送到失败处理程序。

你可以做这样的事情:
if (!IsValidUsername(username))
{
var customEx = new CustomException { Code: "BADLOGIN.USERNAME", Message: "Invalid login details" };
throw new Exception(JsonConvert.SerializeObject(customEx));
}
if (!IsValidPassword(username, password))
{
var customEx = new CustomException { Code: "BADLOGIN.PASSWORD", Message: "Invalid login details" };
throw new Exception(JsonConvert.SerializeObject(customEx));
}

然后在客户端:
hub.server.login(username, password).then(function(userInfo) {
alert("Hello " + userInfo.Name);
}, function(errJson) {
var err = JSON.parse(errJson);
if (err.Code === "BADLOGIN.USERNAME")
alert("Unrecognised user name");
else if (err.Code === "BADLOGIN.PASSWORD");
alert("Invalid password");
else
alert("Unknown error: " + err.Message);
});

我知道这很丑陋,但它应该有效。

关于signalr - 在服务器上处理异常,在客户端自定义失败参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16566311/

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