各位好,我想了解一下,.net webapi项目中,如果客户端发起请求,控制器接收到请求后就开始执行一系列处理操作了.但是会有请求中断的可能.所以我想在返回处理结果的时候,判断一下当前请求的状态,如果中断了,我要进行操作回滚.请问大家有什么经验可以分享.谢谢

解决方案 »

  1.   

    http是无状态的。
    没有请求中断的说法。
    而你的回滚,应该是针对当前逻辑的异常,进行的操作。
    所以无论怎么样,
    你都会返回一个结果给对方。除非对方断网,然后本地提示超时。
    否则,无论异常与否,都会有一个包装类来反馈结果。你该回滚的回滚,正常的就返回正常数据。
      

  2.   

    这个不看他在线还是不在线,http没能力知道。这个是说我这个业务是否需要客户确认比如12306,比如京东。在支付阶段都是如此,支付成功没成功,看网银确认。没确认的都在待支付列表,这个列表维持20分钟(通常如此)-------比如我前天订火车票,正好在地铁出站口,正好手机信号不好,正好卡在调支付宝支付环节。那么12306跟你说的,我要回撤么?没有回撤,12306回等待支付确认(这是业务逻辑,不是断开不断开的)直到20分钟超时还没处理所以不是做请求“断”不“断”,而是业务逻辑确认。
      

  3.   

    通过HttpContex的RequestAborted 可以实现   
    asp .net core开发团队已经考虑到这种情况了
      

  4.   


    ok,我尝试一下,因为Java中是有一个机制可以捕捉到中断异常的,我想.net应该也会有的.谢谢
      

  5.   


    HttpContext.RequestAborted.IsCancellationRequested这个确实可以知道请求是否中断,但是HttpContext这个对象,在webapi的项目中是无法获取到的.虽然他们都是在System.Web命名空间下的两个类 但是在Controller中的HttpContext是一个HttpContextBase类型的属性(真正的HttpContextWrapper类型,是对System.Web.HttpContext的一个封装),System.Web.HttpContext是一个类型,这两个类之间没有继承关系.所以要想在控制器里得到HttpContext对象,貌似是没有办法的.不知道你是否了解更多的方法实现.谢谢