2017-01-22 10 views
1

私を助けてください!Asp.Net Web Api2 + SignalR

私はMailのプロジェクトをいくつか持っています。私はSignalRを使用する必要があります。 は今、私は唯一の私はMailController

[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(); 
    } 
} 

持っ

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

ハブ

持っている私のスタートアップ

app.MapSignalR(); 

でこれを持っているとどのように私は、このコントローラーでSignalRを使用することはできますか? 一部のユーザーがSignalRを使用して別のユーザーに電子メールを送信する必要があります。

+0

jquaryコードはどこですか? – Hadee

+0

私の仕事はバックエンドを作ることです。 Jquaryコードは別の開発者を作成します。 –

答えて

0

こんにちは、メソッドを静的に変更し、MVCコントロールをclassname.methodnameで呼び出すことができました。私はあなたが同じことをすることができると思います。

 [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); 
    } 
} 
+0

これはエラーです - 静的コンテキストで非静的プロパティ "Clients"にアクセスできません。 –

+0

okをチェックさせてください。 –

+0

@OlegLyahovetskyi今すぐお試しください:) –

1

コードを見ると、コントローラでの操作と同じ方法でメールを送信できます。

[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のクライアントに応答を送信するだけでパラメータを受け取り、あなたのようにメールを送信するためには固有の要件はありませんコントローラ内にあるだろう。

+0

はい、私はSendMessage、ShowAllMessagesなどのメソッドがたくさんあります。 MailHubでどのようにアクセスできますか?私はあらゆる方法への道が必要です。さらにもう一つ:私はSignalRが受信機にnotoficationを送信する必要があります!どのように私はこれを行うことができますか?ありがとうございました。 –

関連する問題