检测SignalR授权来自Web客户端的故障

时间:2015-01-14 11:05:35

标签: 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;
    }
}

在网页上:

    $(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代码)。有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:0)

鉴于拒绝r,请检查r.source.status。当授权问题时,这应该给你一个401/403。

答案 1 :(得分:0)

SignalR使用jQuery,因此可以通过以下方式检测401状态代码:

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