2015-01-14 83 views
3

我正在尝试使用承载在asp.net MVC5应用程序中的SignalR,并且检测到Web客户端的授权失败。检测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); 
      }); 
    }); 

当我在集线器配置启用详细的错误,我的承诺,拒绝为得到这个喜

Error: Caller is not authorized to invoke the Hi method on ChitChat. 

没有详细的错误,我只是得到

Error: There was an error invoking Hub method 'chitchat.Hi'. 

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

+0

你有没有设法找到了实现这一目标的方法吗?我也尝试做同样的事情。 –

回答

0

给出拒绝r,请检查r.source.status。这是授权问题时应该给你的401/403。

0

SignalR使用jQuery的引擎盖下,所以检测的401个状态码可以通过以下方式实现:

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