各位好,我想了解一下,.net webapi專案中,如果客戶端發起請求,控制器接收到請求后就開始執行一系列處理操作了.但是會有請求中斷的可能.所以我想在回傳處理結果的時候,判斷一下當前請求的狀態,如果中斷了,我要進行操作回滾.請問大家有什么經驗可以分享.謝謝
uj5u.com熱心網友回復:
http是無狀態的。沒有請求中斷的說法。
而你的回滾,應該是針對當前邏輯的例外,進行的操作。
所以無論怎么樣,
你都會回傳一個結果給對方。除非對方斷網,然后本地提示超時。
否則,無論例外與否,都會有一個包裝類來反饋結果。你該回滾的回滾,正常的就回傳正常資料。
uj5u.com熱心網友回復:
這個可能,你是如何證明的?
最起碼,你要有證據來證明 這種"中斷"是存在的.
在說了, 假設你說的成立, 中斷了你還能回傳? 那還叫"中斷"了嗎....
先證明一下存在.在討論下一步吧.
uj5u.com熱心網友回復:
要不你就發起兩次請求 ,你要回滾不也就是撤銷之前的資料操作嗎。。uj5u.com熱心網友回復:
這個不看他在線還是不在線,http沒能力知道。這個是說我這個業務是否需要客戶確認比如12306,比如京東。在支付階段都是如此,支付成功沒成功,看網銀確認。沒確認的都在待支付串列,這個串列維持20分鐘(通常如此)-------比如我前天訂火車票,正好在地鐵出站口,正好手機信號不好,正好卡在調支付寶支付環節。那么12306跟你說的,我要回撤么?沒有回撤,12306回等待支付確認(這是業務邏輯,不是斷開不斷開的)直到20分鐘超時還沒處理
所以不是做請求“斷”不“斷”,而是業務邏輯確認。
uj5u.com熱心網友回復:
通過HttpContex的RequestAborted 可以實作asp .net core開發團隊已經考慮到這種情況了
uj5u.com熱心網友回復:
ok,我嘗試一下,因為Java中是有一個機制可以捕捉到中斷例外的,我想.net應該也會有的.
謝謝
uj5u.com熱心網友回復:
HttpContext.RequestAborted.IsCancellationRequested
這個確實可以知道請求是否中斷,但是HttpContext這個物件,在webapi的專案中是無法獲取到的.
雖然他們都是在System.Web命名空間下的兩個類
但是在Controller中的HttpContext是一個HttpContextBase型別的屬性(真正的HttpContextWrapper型別,是對System.Web.HttpContext的一個封裝),System.Web.HttpContext是一個型別,這兩個類之間沒有繼承關系.
所以要想在控制器里得到HttpContext物件,貌似是沒有辦法的.不知道你是否了解更多的方法實作.
謝謝
uj5u.com熱心網友回復:
勿噴。以前我做個類似的
最后實作如下
添加一個標識欄位。。 先放在快取里面 然后輪詢。。 如果在時間段內用戶有取消操作的話 就不入庫 否則就執行批更新
uj5u.com熱心網友回復:
你怎么知道用戶關閉了瀏覽器的呢?
uj5u.com熱心網友回復:
因為資料放在的是快取里面 即時關閉了瀏覽器 并不會對庫有影響咯
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/146873.html
標籤:ASP.NET
上一篇:制作一個表單程式
