我有一个ToggleSwitch,当它打开时会启动一个HttpListener。下面是打开侦听器的代码。
我的问题是HttpListener没有在监听。我通过邮递员请求http://localhost:8023,请求总是超时。只有在调用GetContextCallBack时才调用httpListener.Stop()。我的代码有什么问题?它在控制台应用程序中工作,但在UWP中不工作。
private void LaunchLocalServer(int port)
{
httpListener = new HttpListener();
httpListener.Prefixes.Add($"http://127.0.0.1:{port}/");
httpListener.Start();
httpListener.BeginGetContext(new AsyncCallback(GetContextCallBack), httpListener);
}
private void GetContextCallBack(IAsyncResult ar)
{
try
{
HttpListener _listener = ar.AsyncState as HttpListener;
if (_listener.IsListening)
{
return;
}
HttpListenerContext context = _listener.EndGetContext(ar);
_listener.BeginGetContext(new AsyncCallback(GetContextCallBack), _listener);
HttpListenerResponse response = context.Response;
response.StatusCode = (int)HttpStatusCode.OK;
response.ContentType = "application/json;charset=UTF-8";
response.ContentEncoding = Encoding.UTF8;
response.AppendHeader("Content-Type", "application/json;charset=UTF-8");
var abcOject = new
{
code = "200",
description = "success",
data = "time=" + DateTime.Now
};
string responseString = JsonConvert.SerializeObject(abcOject,
new JsonSerializerSettings()
{
StringEscapeHandling = StringEscapeHandling.EscapeNonAscii
});
using (StreamWriter writer = new StreamWriter(response.OutputStream, Encoding.UTF8))
{
writer.Write(responseString);
writer.Close();
response.Close();
}
}
catch (Exception ex)
{
Log.Warn($"handle response failed {ex}");
}
}完整代码是这里。
发布于 2022-11-07 03:21:42
这种行为的一个普遍原因是,您需要首先启用UWP应用程序的本地回送( UWP启用本地网络回送 )。UWP应用程序在沙箱中运行,并与系统资源隔离。启用本地网络回送可以使UWP应用程序能够访问本地网络资源。
https://stackoverflow.com/questions/74335495
复制相似问题