Asp.net mvc 如何从ASP.NET Core上的控制器调用集线器中的方法?
我正在使用信号器,我的集线器在一个叫做集线器的文件夹中。我需要在控制器上调用集线器“PostMarker()”中的方法。因此,每次发布内容时,信号员都会更新所有打开的窗口。我该怎么做Asp.net mvc 如何从ASP.NET Core上的控制器调用集线器中的方法?,asp.net-mvc,asp.net-core,model-view-controller,signalr,Asp.net Mvc,Asp.net Core,Model View Controller,Signalr,我正在使用信号器,我的集线器在一个叫做集线器的文件夹中。我需要在控制器上调用集线器“PostMarker()”中的方法。因此,每次发布内容时,信号员都会更新所有打开的窗口。我该怎么做 [HttpPost] public async Task<IActionResult> PostOcorrencias([FromBody] Ocorrencias ocorrencia, IFormFile UploadImag) { ocorrencia.Da
[HttpPost]
public async Task<IActionResult> PostOcorrencias([FromBody] Ocorrencias ocorrencia, IFormFile UploadImag)
{
ocorrencia.DataOcorrencia = DateTime.Now;
//processar a fotografia
//ocorrencia.Fotografia = "(nome fotografia)";
string caminho = "";
if (UploadImag == null)
{
return BadRequest(ModelState);
}
else
{
if (UploadImag.ContentType == "imagens/jpg" ||
UploadImag.ContentType == "imagens/png")
{
string extensao = Path.GetExtension(UploadImag.FileName).ToLower();
Guid g;
g = Guid.NewGuid();
string nome = g.ToString() + extensao;
caminho = Path.Combine(environment.WebRootPath,"imagens", nome);
ocorrencia.Fotografia = nome;
// Cria o ficheiro no sistema
using (var stream = new FileStream(caminho, FileMode.Create))
{
await UploadImag.CopyToAsync(stream);
}
}
}
_context.Ocorrencias.Add(ocorrencia);
//CALL HUB METHOD PostMarker()
await _context.SaveChangesAsync();
}
return CreatedAtAction("GetOcorrencias", new { id = ocorrencia.Id }, ocorrencia);
}
SignalR
IHubContext
提供了一种在中心实例之外向客户端发送消息的方法。上的示例提供了一个示例。使用此处的代码作为起点,您可以:
将IHubContext
插入控制器,假设它名为HomeController
:
public class HomeController : Controller
{
private readonly IHubContext<MyHub> _hubContext;
public HomeController(IHubContext<MyHub> hubContext)
{
_hubContext = hubContext;
}
}
您是否考虑过将IHubContext注入控制器?当我在控制器“\u hubContext=hubContext;”上添加该部分时,它无法识别\u hubContext。它表示只读字段不能分配给(构造函数或变量初始值设定项除外)我链接到的页面上的第一个代码段(1)定义只读字段,并且(2)在控制器的构造函数中分配它。您是否已将步骤(2)添加到代码中?您是否正在讨论此部分?“app.Use(async(context,next){…});”就是这样!非常感谢。
public class HomeController : Controller
{
private readonly IHubContext<MyHub> _hubContext;
public HomeController(IHubContext<MyHub> hubContext)
{
_hubContext = hubContext;
}
}
...
_context.Ocorrencias.Add(ocorrencia);
await _hubContext.Clients.All.SendAsync("RedesignMap");
await _context.SaveChangesAsync();
...