Files
DevToolsAvalonia/常用工具集/ViewModels/02网络相关/HTTP调试ViewModel.cs
2025-08-26 08:37:44 +08:00

272 lines
9.2 KiB
C#

using MES.Utility.Core;
using System;
using System.Collections.Generic;
using .Base;
using System.Threading;
using .Utility.Network;
using System.IO;
using Ursa.Controls;
using Avalonia.Threading;
using Avalonia.Platform.Storage;
namespace .ViewModel._02网络相关
{
public class HTTP调试ViewModel : ViewModelBase
{
private bool getChecked = true;
public bool GetChecked
{
get { return getChecked; }
set
{
getChecked = value;
if (value)
{
Visiable =false;
}
NotifyPropertyChanged();
}
}
private bool downloadChecked = false;
public bool DownloadChecked
{
get { return downloadChecked; }
set
{
downloadChecked = value;
if (value)
{
Visiable = false;
}
NotifyPropertyChanged();
}
}
private bool postChecked = false;
public bool PostChecked
{
get { return postChecked; }
set
{
postChecked = value;
if (value)
{
Visiable = true;
}
NotifyPropertyChanged();
}
}
public string Url { get; set; } = "";
public DelegateCommand ButtonCmd { get; set; }
public bool JsonChecked { get; set; } = true;
public bool FormChecked { get; set; } = false;
public int Timeout { get; set; } = 1000;
public bool Visiable { get; set; } = false;
public string Parms { get; set; } = "";
public string Result { get; set; } = "";
public bool ButtonEnabled { get; set; } = true;
public HTTP调试ViewModel()
{
ButtonCmd = new DelegateCommand(ButtonCmdFunc);
}
private void ButtonCmdFunc(object obj)
{
if (Url.IsNullOrEmpty())
{
MessageBox.ShowAsync("请输入URL");
return;
}
string url = Url;
if (!url.ToLower().StartsWith("http"))
{
url = "http://" + url;
}
int timeout = Timeout;
if (GetChecked)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
if (url.Contains("?"))
{
int index = url.IndexOf("?");
string parms = url.Substring(index + 1, url.Length - index - 1);
string[] parmsArray = parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
parmsArray = Parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
url = url.Substring(0, index);
}
else
{
string[] parmsArray = Parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
}
ButtonEnabled = false;
Result = string.Empty;
new Thread(() =>
{
string ret = HttpUtils.DoGet(url, dict, timeout);
if (!ret.IsNullOrEmpty())
{
Result = ret;
}
else
{
Result = "网络或服务器异常";
}
ButtonEnabled = true;
}).Start();
}
else if (DownloadChecked)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
if (url.Contains("?"))
{
int index = url.IndexOf("?");
string parms = url.Substring(index + 1, url.Length - index - 1);
string[] parmsArray = parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
parmsArray = Parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
url = url.Substring(0, index);
}
else
{
string[] parmsArray = Parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
}
ButtonEnabled = false;
Result = string.Empty;
new Thread(() =>
{
byte[] ret = HttpUtils.DoGetFile(url, timeout);
if (ret == null)
{
Result = "网络或服务器异常";
}
else
{
Dispatcher.UIThread.Invoke(async () =>
{
var sp = GlobalValues.StorageProvider;
if (sp is null) return;
var result = await sp.SaveFilePickerAsync(new FilePickerSaveOptions()
{
Title = "保存文件"
});
if (result == null) return;
string filePath = result.Path.LocalPath;
using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
fs.Write(ret, 0, ret.Length);
}
await MessageBox.ShowAsync("下载完成");
});
}
ButtonEnabled = true;
}).Start();
}
else
{
//JSON
if (JsonChecked)
{
ButtonEnabled = false;
Result = string.Empty;
new Thread(() =>
{
string ret = HttpUtils.DoPostJson(url, Parms, timeout);
if (!ret.IsNullOrEmpty())
{
Result = ret;
}
else
{
Result = "网络或服务器异常";
}
ButtonEnabled = true;
}).Start();
}
else
{
Dictionary<string, string> dict = new Dictionary<string, string>();
string[] parmsArray = Parms.Split('&');
foreach (string parm in parmsArray)
{
if (parm.Contains("="))
{
string[] array = parm.Split('=');
dict.Add(array[0], array[1]);
}
}
ButtonEnabled = false;
Result = string.Empty;
new Thread(() =>
{
string ret = HttpUtils.DoPostForm(url, dict, timeout);
if (!ret.IsNullOrEmpty())
{
Result = ret;
}
else
{
Result = "网络或服务器异常";
}
ButtonEnabled = true;
}).Start();
}
}
}
}
}