ASP.NET Core MVC中点击HTML按钮触发C# TCP请求的实现方案
问题解决:ASP.NET Core MVC点击按钮触发后端TCP请求
你在ASP.NET Core MVC中要实现点击按钮后由后端发起TCP请求,再返回Index页面,不需要JavaScript就能搞定,原代码的问题主要在表单路由和后端代码的几个细节上,下面是修正方案:
1. 修正视图中的表单代码
原表单的控制器参数错误,MVC中指定控制器名称时不需要加Controller后缀,把"HomeController"改成"Home"即可,同时建议显式指定请求方法:
<div class="row"> <div class="col-sm-4"> <div class="card-body b"> @using (Html.BeginForm("HandleButtonOn", "Home", FormMethod.Post)) { <button type="submit" name="ButtonOn" class="btn btn-success btn-lg btn-block" value="1">High Power</button> } </div> </div> </div>
2. 修正后端Controller代码
原代码存在请求阻塞、无限重试、资源未释放等问题,修改后的代码如下:
namespace Flexi_Arm.Controllers { public class HomeController : Controller { private readonly ILogger<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; } public IActionResult Index() { return View(); } [HttpPost] public IActionResult HandleButtonOn(string ButtonOn) { // 限制重试次数,避免无限循环占用资源 int retryCount = 3; bool isConnected = false; while (retryCount > 0 && !isConnected) { try { // 使用using自动释放资源,避免内存泄漏 using (TcpClient client = new TcpClient("127.0.0.1", 1302)) using (NetworkStream stream = client.GetStream()) { string messageToSend = "My name is Neo"; byte[] sendData = Encoding.ASCII.GetBytes(messageToSend); stream.Write(sendData, 0, sendData.Length); _logger.LogInformation("发送数据至TCP服务器..."); using (StreamReader sr = new StreamReader(stream)) { string response = sr.ReadLine(); _logger.LogInformation("服务器响应: {Response}", response); } } isConnected = true; } catch (Exception e) { _logger.LogError(e, "TCP连接失败,剩余重试次数: {RetryCount}", retryCount - 1); retryCount--; Thread.Sleep(1000); // 重试前短暂延迟 } } return RedirectToAction("Index"); // 用重定向确保路由规范,避免重复提交 } } }
关键修改说明:
- 用
[HttpPost]标记Action,和表单的Post请求方法对应 - 替换
Console.WriteLine为ILogger日志,Web应用需通过日志系统查看输出,而非控制台 - 移除
Console.ReadKey(),避免请求阻塞 - 用
using语句包裹所有需要释放的资源,自动回收内存 - 把
goto改为带次数限制的循环,防止无限重试 - 用
RedirectToAction代替直接返回View,确保页面路由正确
修改完成后,点击按钮即可触发后端TCP请求,执行完成后自动跳回Index页面,全程无需JavaScript。
内容的提问来源于stack exchange,提问作者Tanguy LEBRET
相关产品推荐
相关产品推荐

