2017-08-29 57 views
1

我需要能夠從MVC應用程序的控制器調用我的SS服務。理想情況下,我想打電話給他們在進程中,以避免建立http請求等開銷。使用驗證和過濾器調用ServiceStack服務的問題

從沖刷文檔,我覺得有2個建議的方法,但都沒有完全工作。

1)ServiceGateway - 使用服務網關。這稱爲驗證過濾器,但不會調用我添加的其他客戶過濾器。沒有選擇應用過濾器。

2)HostContext.ServiceController.Execute - 這個方法有一個名爲applyFilters的專用選項,當我將它設置爲true時,它工作並應用過濾器和驗證(儘管它只執行GlobalFilters,而不是TypedRequestFilters)。但是,如果在服務上設置了[CacheResponse]屬性,它將覆蓋並刷新對我的客戶端的響應,覆蓋MVC控制器的流程,我不知道如何阻止此操作。如果我將applyFilters設置爲false或者關閉CacheResponse,它不會執行此操作。更改緩存的優先級不起作用。

我打電話Execute方法從我的控制器上的操作方法中,如下所示:

HostContext.ServiceController.Execute(serviceRequest, HostContext.GetCurrentRequest(), true); 

這種方法甚至將控制返回的響應被刷新到Chrome瀏覽器上的網頁,然後什麼/ null是前從方法返回。

我覺得關於點1)一個功能缺失和點2)在實施中的一個錯誤,雖然我沒有足夠的信心在我的知識SS來彌補!請幫忙!

謝謝。

回答

0

過濾器被執行爲part of the HTTP Request Pipeline並且可以用自定義HTTP響應終止當前的請求。在執行請求以檢查它是否被請求過濾器終止後,您可以檢查IRequest.IsClosed。它們的行爲與內部網關請求不兼容,因此無法在網關中執行它們。

我已經將這些ServiceController方法標記爲this commit中的進行中請求,它應該可以用忽略進程請求中的[CacheResponse]屬性來解決問題。

此更改現在可以從v4.5.13(目前爲available on MyGet)獲得。

相關問題