我正在学习c#中的signalR安全性。对于signalR,谷歌提供的样本和文档很多。使用这个我可以理解signalR的概念。我正在尝试使用授权创建控制台聊天应用程序。没有authorize属性,我可以发送和接收消息。使用“[authorize]”时,我收到以下错误。
Error: InnerException: System.InvalidOperationException
HResult=-2146233079
Message=There was an error invoking Hub method 'Test.DetermineLength'.
服务器程序:
public class Program
{
static void Main(string[] args)
{
string url = @"http://localhost:8080/";
using (WebApp.Start<StartUp>(url))
{
Console.WriteLine(string.Format("Server running at {0}", url));
Console.ReadLine();
}
}
public class StartUp
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
[HubName("Test")]
public class TestHub : Hub
{
[Authorize]
public void DetermineLength(string message)
{
Console.WriteLine(message);
string newMessage = string.Format(@"{0} has a length of: {1}", message, message.Length);
Clients.All.ReceiveLength(newMessage);
}
}
}
客户计划:
public class Program
{
static void Main(string[] args)
{
IHubProxy _hub;
string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("Test");
connection.Start().Wait();
string line = null;
while ((line = System.Console.ReadLine()) != null)
{
_hub.Invoke("DetermineLength", line).Wait();
_hub.On("ReceiveLength", x => Console.WriteLine(x));
}
}
}
如何在c#中使用siganlR在客户端和服务器之间执行授权通信。救救我!
答案 0 :(得分:0)
来自SignalR官方文档:
SignalR提供Authorize属性以指定哪些用户或角色可以访问集线器或方法。此属性位于Microsoft.AspNet.SignalR命名空间中。您将“授权”属性应用于集线器或集线器中的特定方法。将Authorize属性应用于集线器类时,指定的授权要求将应用于集线器中的所有方法。本主题提供了可以应用的不同类型的授权要求的示例。如果没有Authorize属性,连接的客户端可以访问集线器上的任何公共方法。
http://www.asp.net/signalr/overview/security/hub-authorization
您想为谁授权该方法?你有用户定义的角色吗?
您无法将此方法与ListNode*& head
属性一起使用,因为您的应用中没有任何用户。
尝试定义一些角色并查看它是否有效。
祝你好运!