#c# #asp.net-mvc #signalr #signalr-hub
#c# #asp.net-mvc #signalr #signalr-концентратор
Вопрос:
Не могли бы вы сказать мне, почему имена в классах-концентраторах находятся в camelCase, но в клиентском js-коде это в lowerCamelCase? И почему я не могу вызвать Hello-метод из MyHub-класса просто MyHub.server.Hello
?
Я имею в виду, что было бы более понятно называть внутренние методы их точными c #-именами, не так ли? Имеет ли это переименование какое-либо другое значение, кроме соглашений о стиле кода?
Я надеюсь, что мой вопрос достаточно ясен.
В script.js:
$(function() {
var hub = $.connection.myHub;
hub.client.hello = function (message) { //why not hub.client.Hello ?
alert(message);
}
$("#btn").click(function(){
hub.server.hello(); //why not hub.server.Hello() ??
});
});
В MyHub-классе:
public class MyHub : Hub
{
public void Hello()
{
Clients.All.hello(); //why not Clients.All.Hello() ?
}
}
Ответ №1:
Это связано с соглашением об именовании и кодами прокси SignalR.
JavaScript — это язык, чувствительный к регистру, где, как предполагает Dotnet, используется camelCasing. Вызов метода на стороне сервера проходит через прокси-коды, которые есть в javascript.
Комментарии:
1. Добавление к тому, что опубликовал Рахатур. когда мы включаем <script src=»signalr/hubs»></script> a file hubs.js is generated automatically by the signalr framework and this follows the convention (hub name / async methos are camel cased in javascript and pascal cased in c#) У вас также есть выбор не использовать этот прокси. Просто не включайте эту строку и создайте свой собственный прокси. Тогда вы можете использовать точные имена как в коде javascript, так и в коде c #. также вместо hub.server вы должны использовать hub.invoke (‘Привет’). Если вы считаете, что использование другого корпуса может вызвать путаницу, вы можете использовать позже.
Ответ №2:
Javascript традиционно использует camelCase
соглашение об именовании для имен методов, которое обычно использует экосистема .net PascalCase
. Javascript и некоторые языки .net чувствительны к регистру.