我正在试验在asp.net MVC5应用程序中托管的SignalR,并且在检测来自Web客户端的授权失败时遇到了问题。
我有一个简单的集线器如下:
public class ChitChat : Hub
{
[Authorize]
public string Hi(string incoming)
{
Clients.All.echo(incoming);
return "Echoed " + incoming;
}
}
在网页上:
$(function() {
var hub = $.connection.chitChat;
hub.client.echo = function(msg) {
console.log(msg);
}
$.connection.hub.start().done(function() {
console.log("Done starting hub");
hub.server.hi("Client message")
.done(function() {
console.log(arguments);
})
.fail(function() {
console.log(arguments);
});
})
.fail(function() {
console.log("Fail hub" + arguments);
});
});
当我在集线器配置中启用详细错误时,我在hi
的承诺拒绝中得到了这个Error: Caller is not authorized to invoke the Hi method on ChitChat.
没有详细错误,我只是
Error: There was an error invoking Hub method 'chitchat.Hi'.
我想保留详细的错误,但仍然可以获得一些识别auth失败的可靠方法(我假设我会在某处获得401/403代码)。有没有办法实现这个目标?
答案 0 :(得分:0)
鉴于拒绝r,请检查r.source.status。当授权问题时,这应该给你一个401/403。
答案 1 :(得分:0)
SignalR使用jQuery,因此可以通过以下方式检测401状态代码:
$.ajaxSetup({
statusCode: {
401: function() {
// your code is here
}
}
});