C# javascript 交互 互通

在 Web 开发中,C# 和 JavaScript 的交互是非常常见的需求,特别是在使用 ASP.NET 或 ASP.NET Core 进行后端开发,并通过前端 JavaScript 处理用户界面和交互时。以下是几种常见的 C# 和 JavaScript 交互方式和场景,我会尽可能详细地回答你的问题。

1. 通过 AJAX 请求

使用 AJAX 技术可以在前端 JavaScript 中向后端的 C# Web 服务发送请求,并接收响应。这种方式是最常见和基础的交互方式。

在 C# 后端:

csharp
// ASP.NET Core 控制器示例 using Microsoft.AspNetCore.Mvc; [Route("api/[controller]")] [ApiController] public class DataController : ControllerBase { [HttpGet] public IActionResult GetData() { var data = new { message = "Hello from C#!" }; return Ok(data); } }

在 JavaScript 前端:

javascript
// 使用 fetch API 发送 GET 请求 fetch('/api/Data') .then(response => response.json()) .then(data => { console.log(data.message); // 输出: Hello from C#! }) .catch(error => { console.error('Error:', error); });

2. 使用 SignalR 进行实时通信

SignalR 是一个 ASP.NET Core 库,用于实现实时 Web 功能。它可以让服务器端代码推送内容到连接的客户端,而无需客户端发出请求。

在 C# 后端:

csharp
// Startup.cs 配置 SignalR using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapHub<MyHub>("/myHub"); }); } // SignalR Hub 示例 using Microsoft.AspNetCore.SignalR; public class MyHub : Hub { public async Task SendMessage(string message) { await Clients.All.SendAsync("ReceiveMessage", message); } }

在 JavaScript 前端:

javascript
// SignalR 客户端连接和接收消息 const connection = new signalR.HubConnectionBuilder() .withUrl("/myHub") .configureLogging(signalR.LogLevel.Information) .build(); connection.start().then(function () { console.log("SignalR connected!"); connection.on("ReceiveMessage", function (message) { console.log("Message from C#: " + message); }); }).catch(function (err) { console.error(err.toString()); }); // 发送消息给 SignalR Hub document.getElementById("sendButton").addEventListener("click", function (event) { const message = document.getElementById("messageInput").value; connection.invoke("SendMessage", message).catch(function (err) { console.error(err.toString()); }); event.preventDefault(); });

3. 使用 Razor 页面和 Razor 组件

如果你在 ASP.NET Core 中使用 Razor 页面或 Razor 组件,你可以方便地将 C# 代码和 JavaScript 代码混合在同一个页面或组件中。

在 Razor 页面(.cshtml)中:

html
@page @model IndexModel @{ ViewData["Title"] = "Home page"; } <h1>Hello, @Model.Name!</h1> <button onclick="sayHello()">Say Hello from JavaScript</button> <script> function sayHello() { var message = "Hello from JavaScript!"; console.log(message); } </script>

在相应的 C# 后端页面模型中:

csharp
public class IndexModel : PageModel { public string Name { get; set; } public void OnGet() { Name = "User"; } }

这些示例展示了 C# 和 JavaScript 在不同场景下的交互和互通方式。具体选择哪种方式取决于你的应用程序需求和架构设计。如果你有特定的场景或问题,欢迎继续问我!