在c#中使用ASP.net MVC显示客户端PC信息



我目前正试图在MVC asp.net项目中使用powershell,我正试图找出如何在点击上显示文本,但我来自python背景。目前我的模型,视图和控制器正在加载,但当我点击提交时什么也没发生。我目前拥有的代码如下,我想我只是不确定在哪里添加powershell脚本来更新文件。

模型
using System.Diagnostics;
namespace GenesisMVC.Models
{
public class IPAddress
{
public string? IP
{
get; set;
}
public static async Task<string> GetIpAddressTask()
{
const string fileName = "ipPower_Async.txt";
if (File.Exists(fileName))
{
File.Delete(fileName);
}
var start = new ProcessStartInfo
{
FileName = "powershell.exe",
UseShellExecute = false,
RedirectStandardOutput = true,
Arguments = "Invoke-RestMethod ipinfo.io/ip",
CreateNoWindow = true
};

using var process = Process.Start(start);
using var reader = process.StandardOutput;
process.EnableRaisingEvents = true;
var IpAddress = reader.ReadToEnd();
await File.WriteAllTextAsync(fileName, IpAddress);
await process.WaitForExitAsync();
return await File.ReadAllTextAsync(fileName);
}
}
}

视图

@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>

@model GenesisMVC.Models.IPAddress
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.TextBoxFor(model => model.IP)
@Html.ValidationMessageFor(model => model.IP)
<button type="submit">Get IP Address</button>

}

控制器

using GenesisMVC.Models;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
namespace GenesisMVC.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
[HttpPost]
public ActionResult showIP(IPAddress model)
{
if (ModelState.IsValid)
{
//TODO: IpAddress(model.IP);
}

return View("Index", model);
}
}
}

供大家参考,开发人员https://github.com/ElectronNET/electron.net-api-demos为此制作了一个体面的教程,但让我们只使用我这种有点愚蠢但能干的开发人员。

基本上你会想要用索引创建一个类型脚本文件。作为模板的Ts文件

一旦你有了一个类型脚本文件,把你的自定义JS放在脚本的onHostRead()部分

构建它这将创建js文件,使其看起来与其他示例文件相似。

为您的自定义js创建一个控制器,如hostook .cs,这在API演示中称为mainfunction

添加前置逻辑到您的软件. ....所以我还在测试我是否做对了

这在visual studio代码中不起作用,我使用visual studio 2022

不要安装visual studio推荐的类型脚本nuget包,它不在文档中,会破坏构建。

有时候有能力的人太忙了,没有时间帮忙,所以深入代码并变得更好(在这里自言自语)

ipController.cs

using ElectronNET.API;
using ElectronNET.API.Entities;
using Microsoft.AspNetCore.Mvc;
using System.Linq;
namespace ElectronNET_API_Demos.Controllers
{
public class IPController : Controller
{
public IActionResult Index()
{
if (HybridSupport.IsElectronActive)
{
Electron.IpcMain.On("start-hoosthook", async (args) =>
{
var mainWindow = Electron.WindowManager.BrowserWindows.First();
var options = new OpenDialogOptions
{
Properties = new OpenDialogProperty[]
{
OpenDialogProperty.openDirectory
}
};
var folderPath = await Electron.Dialog.ShowOpenDialogAsync(mainWindow, options);
var resultFromTypeScript = await Electron.HostHook.CallAsync<string>("get-ip-address", folderPath);
Electron.IpcMain.Send(mainWindow, "ip-address-found", resultFromTypeScript);
});
}
return View();
}
}
}

ipAddress.ts

// @ts-ignore
import * as Electron from "electron";
import { Connector } from "./connector";
import { IPAddress } from "./ipAddress";
export class HookService extends Connector {
constructor(socket: SocketIO.Socket, public app: Electron.App) {
super(socket, app);
}
onHostReady(): void {
// execute your own JavaScript Host logic here
var os = require("os");
var result = console.log(os.networkInterfaces);

return result;
}
}

ipAddress.js


"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HookService = void 0;
const connector_1 = require("./connector");
class HookService extends connector_1.Connector {
constructor(socket, app) {
super(socket, app);
this.app = app;
}
onHostReady() {
// execute your own JavaScript Host logic here
var os = require("os");
var result = console.log(os.networkInterfaces);
return result;
}
}
exports.HookService = HookService;
//# sourceMappingURL=ipAddress.js.map

最新更新