我有一个防止多次请求指定Action的需求,我的做法是自定义一个继承与ActionFilter的自定义类,在ActionExecuting中判断及取消执行,但是发现在ActionExecuting中不能取消,只有ActionExecuted中可以取消,求大大神支招啊。
你是如何取消的?
@dudu: 这个不行,我是想直接终止掉,不能返回任何响应到客服端
@程序有Bug: 你的想法是错误的,HTTP 的请求和响应是成对出现的,如果客户端提交一个 Request,而服务器没有返回 Response,那么客户端会一直等待直到超时。
@Launcher: 可以服务器端主动终止
@程序有Bug: 从目前的 Asp.Net 的处理管线来看,你无论是抛出异常或者 Response.Close,它都会返回一个 Response 给客户端,因为你无法直接控制 Socket ,没法直接调用 Shutdown 或 Close,如果你能够调用 Socket 的 Shutdown 或 Close,那么客户端的实现将产生一个异常,通常是连接被意外终止。
@程序有Bug: 如是你想直接粗暴地终止,可以用下面的方法:
protected override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.HttpContext.Response.End(); }
@dudu: 这个没用的,它还是会跑里面的方法
@程序有Bug: 跑哪个里面的方法?
@dudu: 我贴这个标签的那个方法还是会执行
你的问题是不是可以简化为“先在web里面发起一个web请求,然后后悔了想取消当前这个请求”,是吗?
可以怎么说
虽然你结贴了,还是给你个答案:
设置filterContext.Result的值。MVC在执行过程中,始终都会判断Result对象,如果不为空则直接启动Result的执行(ResultExecuting,Result.Execute,ResultExecuted),否则,按照MVC的既有逻辑执行。
谢谢你的回复