簡體   English   中英

Asp.Net Web Api2 + SignalR

[英]Asp.Net Web Api2 + SignalR

請幫幫我!

我有一些郵件項目。 我需要使用 SignalR。 現在我的 Startup 中只有這個

app.MapSignalR();

我有集線器

[HubName("MailHub")]
public class MailHub<THub>: Hub
    where THub : IHub
{
    public void SendMessage (Mail message)
    {
        Clients.Caller.addMessage(message);
    }
}

我有郵件控制器

 [Authorize]
[RoutePrefix("api/mail")]
public class MailController : ApiController

{

    private readonly MailStore<Mail> _mail;

    public MailController()
    {
        _mail = new MailStore<Mail>(MongoUtil<Mail>.GetDefaultConnectionString());
    }

    [HttpPost]
    [Route("send")]
    public async Task<IHttpActionResult> SendMessage(Mail message)
    {
        var hubContext = GlobalHost.ConnectionManager.GetHubContext<MailHub<IHub>>();

        if (hubContext != null)
        {

            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            var currentUser = User.Identity.Name;

            var sendMessage = new Mail
            {
                Subject = message.Subject,
                Sender = message.Sender,
                Receiver = message.Receiver,
                Message = message.Message
            };

            await _mail.CreateAsync(sendMessage);

          //  hubContext.Clients.Clien....;

            /*   if (!result.Succeeded)
               {
                   return BadRequest(ModelState);
               }
               */
            return Ok();
        }
        return BadRequest();
    }
}

以及如何在此控制器上使用 SignalR? 我需要某個用戶使用 SignalR 向另一個用戶發送電子郵件。

查看您的代碼,您可以像在控制器中一樣發送電子郵件。

[HubName("MailHub")]
public class MailHub<THub>: Hub
    where THub : IHub
{
    public void SendMessage (Mail message)
    {
        var sendMessage = new Mail
        {
            Subject = message.Subject,
            Sender = message.Sender,
            Receiver = message.Receiver,
            Message = message.Message
        };
        await _mail.CreateAsync(sendMessage);
    }
}

或更簡單地說:

[HubName("MailHub")]
public class MailHub<THub>: Hub
    where THub : IHub
{
    public void SendMessage (Mail message)
    {
        await _mail.CreateAsync(message);
    }
}

SignalR 沒有內在要求將響應發送回 SignalR 客戶端(除非您願意),只需像在控制器中一樣接收參數並發送郵件即可。

嗨,我將方法更改為靜態,然后我可以使用 classname.methodname 調用 MVC 控制器。 我想你也可以這樣做。請試着告訴我。

      [HubName("MailHub")]
    public class MailHub<THub>: Hub
          where THub : IHub
    {
    // change to static
    public static void SendMessage (Mail message)
    {
       IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MailHub>();
       context.Clients.All.addMessage(message);
     }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM