我的 api 项目中有这个委托处理程序:
class MyHandler : DelegatingHandler {
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken) {
var info = GrabSomeParametersFromHeader();
var isValid = await Validate(info); // this is a very light database query
if (!isValid) {
Log(request, info, false);
var response = new HttpResponseMessage(HttpStatusCode.Forbidden);
return response;
}
HttpContext.Current.SetMobileRequestInfo(info);
var result = await base.SendAsync(request, cancellationToken);
Log(request, info, result.IsSuccessStatusCode &&
result.StatusCode == HttpStatusCode.OK);
return result;
}
}
HttpContext.Current.SetMobileRequestInfo
只需添加info
对象添加到 http-items 以便稍后在应用程序中使用。
这Validate
是一个非常轻量级的数据库查询。和Log
方法是将请求的数据(如URI和查询字符串等)插入数据库。
有时,我的应用程序会出现奇怪的行为:它只是崩溃了!没有日志,没有错误,什么都没有。只是服务器不响应请求。我必须重新启动应用程序(例如通过在 中进行虚假更改web.config
)才能使其恢复工作。该应用程序是一个非常简单的应用程序。我在 IIS 7.5 机器上运行的 .NET 4.5 平台上使用 ASP.NET Web API 2。我唯一能想到的地方是提到的委托处理程序,这可能会导致错误。你有什么主意吗?委托处理程序是否有任何可能导致应用程序关闭的性能副作用?