using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
using WIDESEAWCS_S7Simulator.Core.Entities;
|
|
namespace WIDESEAWCS_S7Simulator.Web.Pages;
|
|
/// <summary>
|
/// 实例详情页
|
/// </summary>
|
public class DetailsModel : PageModel
|
{
|
private readonly ILogger<DetailsModel> _logger;
|
private readonly IHttpClientFactory _httpClientFactory;
|
|
public DetailsModel(ILogger<DetailsModel> logger, IHttpClientFactory httpClientFactory)
|
{
|
_logger = logger;
|
_httpClientFactory = httpClientFactory;
|
}
|
|
public InstanceState? Instance { get; private set; }
|
|
public List<S7ClientConnection> Clients { get; private set; } = new();
|
|
public async Task<IActionResult> OnGetAsync(string id)
|
{
|
if (string.IsNullOrWhiteSpace(id))
|
{
|
return BadRequest("实例ID不能为空");
|
}
|
|
try
|
{
|
var httpClient = _httpClientFactory.CreateClient();
|
httpClient.BaseAddress = new Uri($"{Request.Scheme}://{Request.Host}");
|
|
var response = await httpClient.GetAsync($"/api/SimulatorInstances/{Uri.EscapeDataString(id)}");
|
|
if (response.IsSuccessStatusCode)
|
{
|
Instance = await response.Content.ReadFromJsonAsync<InstanceState>();
|
|
// Load clients
|
var clientsResponse = await httpClient.GetAsync($"/api/instances/{Uri.EscapeDataString(id)}/Clients");
|
if (clientsResponse.IsSuccessStatusCode)
|
{
|
Clients = await clientsResponse.Content.ReadFromJsonAsync<List<S7ClientConnection>>() ?? new();
|
}
|
}
|
else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
|
{
|
return NotFound($"实例 \"{id}\" 不存在");
|
}
|
}
|
catch (HttpRequestException ex)
|
{
|
_logger.LogError(ex, "Failed to load instance details for {InstanceId}", id);
|
ModelState.AddModelError(string.Empty, "加载实例详情失败,请稍后重试");
|
}
|
|
return Page();
|
}
|
}
|