首頁 >後端開發 >C++ >如何從 ASP.NET Core 控制器呼叫 SignalR Core Hub 方法?

如何從 ASP.NET Core 控制器呼叫 SignalR Core Hub 方法?

Barbara Streisand
Barbara Streisand原創
2025-01-05 05:55:44799瀏覽

How to Invoke SignalR Core Hub Methods from an ASP.NET Core Controller?

從控制器呼叫 SignalR Core Hub 方法

在 ASP.NET Core 應用程式中,有時需要從控制器呼叫 Hub 方法。例如,當外部服務執行任務並需要透過 SignalR 通知連線的用戶端時。

解決方案1(動態)

如果您使用Microsoft.AspNetCore.SignalR 庫(版本1.0.0-alpha2-final),您可以將Hub的IHubContext注入到控制器中。以下是一個範例:

[Route("API/vardesigncomm")]
public class VarDesignCommController : Controller
{
    [HttpPut("ProcessVarDesignCommResponse/{id}")]
    public async Task<IActionResult> ProcessVarDesignCommResponse(int id)
    {
        await this.HubContext.Clients.All.InvokeAsync("Completed", id);
        return new JsonResult(true);
    }

    private IHubContext<VarDesignHub> HubContext
    { get; set; }
}

解決方案 2(鍵入)

考慮建立一個介面來定義伺服器可以在客戶端集線器上呼叫的方法。這種方法稱為「類型化集線器端點」:

public interface ITypedHubClient
{
    Task TaskCompleted(int id);
}

public class VarDesignHub : Hub<ITypedHubClient>
{
    public Task TaskCompleted(int id) => Clients.All.InvokeAsync("Completed", id);
}

在您的控制器中,注入類型化 HubContext 並呼叫方法:

[Route("API/demo")]
public class DemoController : Controller
{
    private IHubContext<VarDesignHub, ITypedHubClient> _chatHubContext;

    public DemoController(IHubContext<VarDesignHub, ITypedHubClient> chatHubContext)
    {
        _chatHubContext = chatHubContext;
    }

    [HttpGet]
    public IActionResult TaskCompleted(int id)
    {
        _chatHubContext.Clients.All.TaskCompleted(id);
        return Ok();
    }
}

以上是如何從 ASP.NET Core 控制器呼叫 SignalR Core Hub 方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn