所以我有一个 DNN 模块,它基本上只是一个方框,用于放置文件,然后调整大小、重命名、在本地保存并上传到 Azure blob 容器。现在我需要做的是进行 API 调用(我自己做的)以根据用户的 DNN ID 从数据库中获取一些信息。到目前为止,我发现的所有用于进行 API 调用的方法都需要异步运行,因此我需要将派生该类的接口从 IHttpHandler 更改为 IHttpHandlerAsync。
然而,通过 IHttpHandlerAsync 寻求帮助已被证明是相当困难的。我对网络开发很陌生,所以请原谅任何明显的错误或误解。
public class FileUploader : IHttpAsyncHandler
{
private async Task<int> GetDogAsync()
{
int currentUserDnnId = UserController.Instance.GetCurrentUserInfo().UserID;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
Dog serializedDog = new Dog
{
DogTableID = -1
};
using (var client = new HttpClient())
{
var content = await client.GetStringAsync("https://localhost:5566/api/dogs/getlatestdog/fromdnnid/" + currentUserDnnId);
if (content != null)
{
serializedDog = (new JavaScriptSerializer().Deserialize<Dog>(content));
return serializedDog.DogTableID;
}
}
return serializedDog.DogTableID;
}
#region IHttpAsyncHandler Members
private AsyncProcessorDelegate _Delegate;
protected delegate void AsyncProcessorDelegate(HttpContext context);
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
_Delegate = new AsyncProcessorDelegate(ProcessRequest);
return _Delegate.BeginInvoke(context, cb, extraData);
}
public void EndProcessRequest(IAsyncResult result)
{
_Delegate.EndInvoke(result);
}
#endregion
#region IHttpHandler Members
public bool IsReusable
{
get { return true; }
}
public async void ProcessRequest(HttpContext context)
{
await UploadFile(context);
}
#endregion
public async Task UploadFile(HttpContext context)
{
//file gets resized, renamed, saved and uploaded to Azure
int serializedDogTableId = await GetDogAsync();
}
UploadFile 方法启动 GetDogAsync() 以将返回的信息存储在表中。
我在这里获得了 IHttpAsyncHandler 的示例:https ://madskristensen.net/blog/how-to-use-the-ihttpasynchandler-in-aspnet/
但我不确定如何实现它?现在我得到一个“System.NullReferenceException:'对象引用未设置为对象的实例。'”将图像拖入上传框中时出现异常。我希望我能准确地告诉您此异常的来源,但调试很困难,因为该模块只能在本地托管的 DNN 网站上进行测试。
我确定我只是没有正确使用 IHttpAsyncHandler 接口,因此任何指向正确方向的指针都将不胜感激。