【发布时间】:2018-09-23 10:21:41
【问题描述】:
我需要从代码中删除已保存的 wifi 配置文件,以便再次启用 SoftAP。根据 ms 文档,无法删除配置文件,只能断开连接。这不可能吗?
用于 wifi 的女士文档 https://docs.microsoft.com/en-us/uwp/api/windows.devices.wifi.wifiadapter
设备门户 API https://docs.microsoft.com/de-ch/windows/mixed-reality/device-portal-api-reference#wifi-management
这是我使用设备门户 API 断开 wifi 的工作代码
// API creds
string username = "Administrator";
string password = "p@ssw0rd
// API request URIs
string apiUri = "http://192.168.1.15:8080/api/wifi/network";
// WiFi details
string wifiInterface = string.Empty;
string wifiProfile = string.Empty;
// WiFi access
WiFiAccessStatus wifiAccess = await WiFiAdapter.RequestAccessAsync();
if (wifiAccess == WiFiAccessStatus.Allowed)
{
// Get WiFi adapter
IReadOnlyList<WiFiAdapter> wifiAdapterResult = await WiFiAdapter.FindAllAdaptersAsync();
WiFiAdapter wifiAdapter = wifiAdapterResult[0];
// Get conn profile / details
ConnectionProfile profile = await wifiAdapter.NetworkAdapter.GetConnectedProfileAsync();
wifiInterface = profile.NetworkAdapter.NetworkAdapterId.ToString();
wifiProfile = profile.ProfileName;
}
// API creds
PasswordCredential credentials = new PasswordCredential("login", username, password);
// HttpClient filter
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.CookieUsageBehavior = HttpCookieUsageBehavior.NoCookies;
filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent;
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
filter.ServerCredential = credentials;
// HttpClient
HttpClient client = new HttpClient(filter);
apiUri = apiUri + "?interface=" + wifiInterface + "&op=disconnect" + "&createprofile=no";
// Request
HttpRequestMessage request = new HttpRequestMessage();
request.Method = new HttpMethod("POST");
request.RequestUri = new Uri(apiUri);
// Send request
try
{
// Response
HttpResponseMessage response = await client.SendRequestAsync(request);
// Again
if (response.Content.ToString().Contains("Authorization Required"))
{
response = await client.SendRequestAsync(request);
}
}
catch
{
// Dispose
client.Dispose();
filter.Dispose();
}
但是对于删除 wifi 配置文件,我从 API 中找不到 404。根据上面链接的 API 文档,请求应该没问题。这是我删除 wifi 配置文件的代码
// API creds
string username = "Administrator";
string password = "p@ssw0rd
// API request URIs
string apiUri = "http://192.168.1.15:8080/api/wifi/network";
// WiFi details
string wifiInterface = string.Empty;
string wifiProfile = string.Empty;
// WiFi access
WiFiAccessStatus wifiAccess = await WiFiAdapter.RequestAccessAsync();
if (wifiAccess == WiFiAccessStatus.Allowed)
{
// Get WiFi adapter
IReadOnlyList<WiFiAdapter> wifiAdapterResult = await WiFiAdapter.FindAllAdaptersAsync();
WiFiAdapter wifiAdapter = wifiAdapterResult[0];
// Get conn profile / details
ConnectionProfile profile = await wifiAdapter.NetworkAdapter.GetConnectedProfileAsync();
wifiInterface = profile.NetworkAdapter.NetworkAdapterId.ToString();
wifiProfile = profile.ProfileName;
}
// API creds
PasswordCredential credentials = new PasswordCredential("login", username, password);
// HttpClient filter
HttpBaseProtocolFilter filter = new HttpBaseProtocolFilter();
filter.CookieUsageBehavior = HttpCookieUsageBehavior.NoCookies;
filter.CacheControl.ReadBehavior = HttpCacheReadBehavior.MostRecent;
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
filter.ServerCredential = credentials;
// HttpClient
HttpClient client = new HttpClient(filter);
apiUri = apiUri + "?interface=" + wifiInterface + "&profile=" + wifiProfile;
// Request
HttpRequestMessage request = new HttpRequestMessage();
request.Method = new HttpMethod("DELETE")
request.RequestUri = new Uri(apiUri);
// Send request
try
{
// Response
HttpResponseMessage response = await client.SendRequestAsync(request);
// Again
if (response.Content.ToString().Contains("Authorization Required"))
{
response = await client.SendRequestAsync(request);
}
}
catch
{
// Dispose
client.Dispose();
filter.Dispose();
}
编辑//
为了解决这个问题,自 build 17763 以来,有一种新方法可以直接从可用代码中删除 WiFi 配置文件
bool canDelete = wifiProfile.CanDelete;
if (canDelete)
{
ConnectionProfileDeleteStatus deleteStatus = await wifiProfile.TryDeleteAsync();
}
【问题讨论】:
-
首先,您需要向我们展示一些代码,其中包含您尝试执行的操作以及结果。另外,您能否参考您提到的MS文章。完全有可能无法通过代码删除配置文件,但通常总有办法做某事。你只需要投入一些时间和反复试验
-
我添加了一个指向 ms 文档的链接以进行 wifi 控制。没有这样的删除配置文件的方法。我没有要显示的代码,因为我还没有找到类似的东西。
-
你也可以给我们看看你的代码吗
-
目前我没有代码,因为我找不到任何 API 或删除 wifi 配置文件的方法。我发现的唯一东西是 Windows Device Portal API,但没有示例,所以我不知道如何使用。我已经编辑了问题的链接。
-
不幸的是,我们没有任何东西可以处理您想要的东西,我们无能为力。如果您有一些关于如何将其拉入的代码示例,并试图移除设备,我们可能会做一些事情来帮助您。
标签: c# uwp win-universal-app raspberry-pi3 windows-10-iot-core