しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

SignalR のモデルバインディング

SignalR は ASP.NET MVC や Web API のようにアクションの引数は自動的にバインドしてくれます。

public class SampleHub : Hub
{
    public void Sample(int id, string text)
    {
        // id と text には値が入った状態
    }
}

ちなみに int や string といったプリミティブな型以外でもバインドしてくれます。例えば以下のようなクラスであっても、ちゃんと値がセットされた状態で受け取れます。

public class FormModel
{
    public int Id { get; set; }
    public string Text { get; set; }
}

public class SampleHub : Hub
{
    public void Sample(FormModel model)
    {
        // model.Id と model.Text には値が入った状態
    }
}

他にも Guid などもバインドしてくれて非常に便利なんですが、ソースを呼んだところ SignalR がモデルバインダを持っているわけではなくて、Json.NET のデシリアライズ機能をそのまま使っているだけみたいです。

なので、Json.NET が対応している型なら SignalR でも問題なくバインドが出来るというわけです。