【问题标题】:How to check if ComputerName is INT如何检查 ComputerName 是否为 INT
【发布时间】:2017-04-23 04:08:18
【问题描述】:

我觉得我累了,或者盯着这个看太久了。我需要第二双眼睛。如果有任何事情看起来太啰嗦,请告诉我。

我的目标 检查本地计算机名称,如果它是 INT,然后将其添加到 HTTPClient 请求以从 WebService 返回相关值。仅供参考 - HostName 是此特定表的 ID 值。但是,如果该值不是和 INT,那么我想用一个假值替换实际值,这样我就可以看到我的页面加载正确。

最终,在客户的环境中,如果运行它的本地计算机不是正确组的一部分,我将关闭此页面的显示。这样他们就根本看不到这个配置页面了。

实际结果 因为我正在运行应用程序的当前 VM 没有名称的 INT,所以当我放入断点以检查值时,我得到以下信息。但是我仍然可以访问 localhost:2463/api/devices/101070701 并查看 JSON 结果。所以我只需要让 UWP 放置好,这样我就可以在 APP 中看到它。

主机名 = 0

_HostName = LOCALVM_ComputerName。

DeviceIDService

    public class DeviceIDService
{
    public static DeviceIDService Instance = new DeviceIDService();

    private DeviceIDService()
    {
        foreach (HostName DisplayName in NetworkInformation.GetHostNames())
        {
            if (DisplayName != null)
            {
                var hostNames = NetworkInformation.GetHostNames();
                var hostName = hostNames.FirstOrDefault(name => name.Type == HostNameType.DomainName)?.DisplayName ?? "???";

                LocalName = hostName;

                break;
            }
        }
        public string LocalName { get; set; }
    }
}

DevicePageViewModel

public class DevicePageViewModel : ViewModelBase
{
    private string _Hostname = DeviceIDService.Instance.LocalName;
    public string hostName { get; set; }

    public override async OnNavigatedToAsync ()
    {
       int HostName;
        bool isNumeric = int.TryParse(_Hostname, out HostName);
        if (isNumeric == true)
        {
            HostName = 101070701;
        }
        else
        {
            string hostName = HostName.ToString();
        }

        var uriD = new Uri("http://localhost:2463/api/Devices/" + HostName);
        HttpClient client = new HttpClient();
        try
        {
            var JsonResponseD = await client.GetStringAsync(uriD);
            var devicesResult = JsonConvert.DeserializeObject<List<Device>>(JsonResponseD);
            Devices = devicesResult;

【问题讨论】:

  • 不应该是if (!isNumeric){HostName = 101070701;}吗?
  • 我对这一切还是有点陌生​​...但是您的建议似乎会将包含所有数字的任何主机名的值更改为 101070701,对吗?我想要它做的是,如果它是一个数字,让它通过,如果它是其他任何东西,那么将它更改为 101070701。
  • 否,该建议只会将非数字值更改为 101070701。如果值为数字,int.TryParse 将返回 true。注意 if 语句中的感叹号:if(!isNumeric);这相当于如果 isNumeric 为假。这是working example
  • 好的.. 我会试试的.. 谢谢 Serge。
  • 如果计算机名是999999999999999怎么办?

标签: c# web-services uwp windows-10


【解决方案1】:

因为 Serge 实际上并没有提供答案,而是发表了评论。我想展示他提供的解决我问题的方法。这是我修复的。我改变了一些值,但这对我有用..

  • _Hostname - 在从 pc 获取实际 ComputerName 时设置。
  • hostName - 如果是 INT,将设置为 _Hostname
  • HostName - 如果实际名称不是 INT,则将更改为 101070701
  • HostName - 如果 ComputerName 是 INT,则将被单独保留

    int hostName;
    bool isNumeric = int.TryParse(_Hostname, out hostName);
    if (!isNumeric) {HostName = 101070701}
    else
    {
        HostName = hostName;
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2014-04-30
    • 2018-04-14
    相关资源
    最近更新 更多