Signalr 从web客户端检测信号授权失败

Signalr 从web客户端检测信号授权失败,signalr,signalr-hub,Signalr,Signalr Hub,我正在试验托管在asp.net MVC5应用程序中的SignalR,在检测web客户端的授权失败时遇到问题 我有一个简单的集线器,如下所示: public class ChitChat : Hub { [Authorize] public string Hi(string incoming) { Clients.All.echo(incoming); return "Echoed " + incoming; } } 在网页上:

我正在试验托管在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'.

我想避开详细的错误,但仍然可以找到一些可靠的方法来识别身份验证失败(我假设我会在某个地方得到401/403代码)。有没有办法做到这一点?

如果拒绝r,请检查r.source.status。当它是一个授权问题时,这应该给您一个401/403

Signal在引擎盖下使用jQuery,因此可以通过以下方式检测401状态代码:

$.ajaxSetup({
    statusCode: {
        401: function() {
            // your code is here
        }
    }
});

你是否找到了实现这一目标的方法?我也在尝试做同样的事情。