首页 新闻 会员 周边

asp.net mvc4 ActionExecuting 如何cancel的问题

0
悬赏园豆:50 [已解决问题] 解决于 2015-04-05 20:31

我有一个防止多次请求指定Action的需求,我的做法是自定义一个继承与ActionFilter的自定义类,在ActionExecuting中判断及取消执行,但是发现在ActionExecuting中不能取消,只有ActionExecuted中可以取消,求大大神支招啊。

程序有Bug的主页 程序有Bug | 初学一级 | 园豆:3
提问于:2015-01-26 19:25
< >
分享
最佳答案
0

你是如何取消的?

收获园豆:50
dudu | 高人七级 |园豆:30994 | 2015-01-26 20:53
dudu | 园豆:30994 (高人七级) | 2015-01-26 21:26

@dudu: 这个不行,我是想直接终止掉,不能返回任何响应到客服端

程序有Bug | 园豆:3 (初学一级) | 2015-01-27 08:37

@程序有Bug: 你的想法是错误的,HTTP 的请求和响应是成对出现的,如果客户端提交一个 Request,而服务器没有返回 Response,那么客户端会一直等待直到超时。

Launcher | 园豆:45045 (高人七级) | 2015-01-27 09:16

@Launcher: 可以服务器端主动终止

程序有Bug | 园豆:3 (初学一级) | 2015-01-27 09:57

@程序有Bug: 从目前的 Asp.Net 的处理管线来看,你无论是抛出异常或者 Response.Close,它都会返回一个 Response 给客户端,因为你无法直接控制 Socket ,没法直接调用 Shutdown 或 Close,如果你能够调用 Socket 的 Shutdown 或 Close,那么客户端的实现将产生一个异常,通常是连接被意外终止。

Launcher | 园豆:45045 (高人七级) | 2015-01-27 10:14

@程序有Bug: 如是你想直接粗暴地终止,可以用下面的方法:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    filterContext.HttpContext.Response.End();
}
dudu | 园豆:30994 (高人七级) | 2015-01-27 10:28

@dudu: 这个没用的,它还是会跑里面的方法

程序有Bug | 园豆:3 (初学一级) | 2015-01-27 17:25

@程序有Bug: 跑哪个里面的方法?

dudu | 园豆:30994 (高人七级) | 2015-01-27 18:10

@dudu: 我贴这个标签的那个方法还是会执行

程序有Bug | 园豆:3 (初学一级) | 2015-01-27 18:12
其他回答(2)
0

你的问题是不是可以简化为“先在web里面发起一个web请求,然后后悔了想取消当前这个请求”,是吗?

JeffWong | 园豆:2328 (老鸟四级) | 2015-01-29 18:11

可以怎么说

支持(0) 反对(0) 程序有Bug | 园豆:3 (初学一级) | 2015-01-29 18:21
0

虽然你结贴了,还是给你个答案:

设置filterContext.Result的值。MVC在执行过程中,始终都会判断Result对象,如果不为空则直接启动Result的执行(ResultExecuting,Result.Execute,ResultExecuted),否则,按照MVC的既有逻辑执行。

519740105 | 园豆:5810 (大侠五级) | 2015-04-05 21:24

谢谢你的回复

支持(0) 反对(0) 程序有Bug | 园豆:3 (初学一级) | 2015-04-05 21:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册