c# - 需要帮助在我的方法上实现 IHttpAsyncHandler 以进行 API 调用
问题描述
所以我有一个 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 接口,因此任何指向正确方向的指针都将不胜感激。
解决方案
推荐阅读
- oracle - Oracle 数据库的代理 SQL
- yii2 - 如何延迟 yii2-queue 任务,直到所有先前的任务都完成?
- excel - 向下扫描一列,直到您点击文本,然后粘贴第一行和最后一行的编号
- excel - 如何复制相对于我的活动单元格的一系列单元格?
- swift - 通过进程运行脚本 - 找不到脚本
- c# - 字符串数组 GetLength(1) 工作替代
- python - 如何使用python在文件中有效地存储多个浮点数组
- c# - 使用 SSIS 包和脚本任务执行具有多个子报表的 SSRS 报表
- java - JavaFX + SQL:为 SQL 数据库的每一行添加 1 个带有 3 个 ComboBox 的新 HBox
- reactjs - 在 React 中使用下拉按钮