如何从 ASP.NET 5 WebAPI 调用 javascript 页面上的函数

How to call function on javascript page from ASP.NET 5 WebAPI

好吧,也许我做错了,但是这里是:

我在 dnxcore50 上有一个 ASP.NET 5 WebAPI 项目 运行。它有一个非常简单的控制器,它只实现了 Get() 方法:

public class Data : Controller {
    public JsonResult Get(){
        return Json(/*some data from EF*/);
    }
}

此外,我有 index.htmlmyscripts.js 文件,它们托管一个非常简单的网页。
当 运行 项目在 http://localhost:5000 上打开时,我可以浏览到 index.html 并可以调用

$.getJSON('/api/Data', function(data){
    /*do stuff*/
});

所有这些都适用于所有 OSX 和 Windows。到目前为止一切顺利!

现在,我想要的是:当调用 API 时(例如另一个客户端调用 POST),它应该向 javascript 发送消息以显示事件.
我尝试了什么:

如何从 ASP.NET 5 (dnxcore50) 与 javascript 页面通信?

好的,经过一些研究,我按照@Liam 的建议使用 SignalR 让它工作。 这就是我 SignalR 使用 ASP.NET Core 1.0.

的方式

在项目根目录的 Nuget.config 中,为 SignalR 添加存储库:

 <add key="AspNetVNext" value="https://www.myget.org/F/aspnetmaster/api/v3/index.json" />

project.json 中添加对 SignalR 的引用:

"dependencies":{
    ...     
    "Microsoft.AspNet.SignalR.Server": "3.0.0-*"
}

Startup.cs中,注册SignalR:

public void ConfigureServices(IServiceCollection services)
{
    /* ...other services...*/
    services.AddSignalR(options =>
    {
        options.Hubs.EnableDetailedErrors = true;
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    /*...other configs...*/
   app.UseSignalR();

}

新建 Hub class:

public class EventHub : Hub { }

例如从控制器调用集线器:

private readonly IHubContext hub;       
public ProjectQualityController(IConnectionManager connectionManager)
{
    hub = connectionManager.GetHubContext<EventHub>();
}

public void SendMessage(string value)
{
    hub.Clients.All.sendMessage(value);
}

在javascript文件中,注册到sendMessage事件:

<script src="scripts/jquery.signalR.js"></script>
<script src="signalr/hubs"></script>

<script type="text/javascript">
 $(function () {
     var chat = $.connection.eventHub;
     chat.client.sendMessage = function (message) {
         var encodedMsg = $('<div />').text(message).html();
         alert(encodedMsg)
        };

     // Start the connection.
     $.connection.hub.logging = true;
     $.connection.hub.start()
            .done(function(){ console.log('Now connected, connection ID=' + $.connection.hub.id); })
            .fail(function(){ console.log('Could not Connect!'); });
    });       
  </script>

希望这对某人有所帮助!