我想知道是否有任何技术可以控制 Web 应用程序(ASP.NET)中客户端和服务器之间的通信
例子:
- 请求数
- 检查没有重复请求
- 检查是否执行了操作
工作流程
- 客户端发送请求“A”
- 服务器收到请求“A”,并响应
- 服务器将请求“A”标记为已回答
- 客户端重新发送请求“A”
- 服务器回答请求“A”已被回答
我想知道是否有任何技术可以控制 Web 应用程序(ASP.NET)中客户端和服务器之间的通信
例子:
工作流程
您可以在Global.asax
文件中通过以下方法拦截请求:
protected void Application_BeginRequest(object sender, EventArgs e)
{
var request = ((System.Web.HttpApplication)(sender)).Context.Request;
//here you can evaluate and take decisions about the request
}
在任何 ASP.NET 应用程序中,您都可以使用 HttpApplication 事件来跟踪所需的更改。例如,您可以使用 BeginRequest 和/或 EndRequest 事件来跟踪它:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if(MyGlobalFlags.TrackingRequests){
// do stuff
}
}
protected void Application_EndRequest(object sender, EventArgs e)
{
if(MyGlobalFlags.TrackingRequests){
// do stuff
}
}
根据个人意见,如果我愿意,我会使用可以轻松关闭的全局标志。
如果您谈论的是 ASP.NET MVC 应用程序,我还建议您在要跟踪的操作中使用ActionFilters 。您可以实现自己的 ActionFilter 类并跟踪 OnActionExecuted 和/或 OnResultExecuted 的这些更改。我仍然会使用全局标志来关闭跟踪而不更改代码。
public class MyTrackingActionFilter: ActionFilterAttribute{
public override OnActionExecuted(ActionExecutedContext filterContext)
{
if(MyGlobalFlags.TrackingRequests){
// do stuff
}
}
public override OnResultExecuted(ActionExecutedContext filterContext)
{
if(MyGlobalFlags.TrackingRequests){
// do stuff
}
}
}
作为说明,我不会尝试在这些事件中做重的事情。如果轨道需要大量可以并行运行的数据库操作,我建议您在使用线程池的同时使用队列系统。