2

我需要編寫網站,該網站必須具有單個頁面應用程序中的私有部分和必須處於經典樣式中的公共部分通過搜索引擎索引)與Ajax支持而不使用CORS或JSONP。所有邏輯必須處於服務(RESTful)風格,以便將來的移動應用程序支持。所以我決定在一個項目中使用ASP.NET MVC和ASP.NET Web API(以防止CORS或JSONP),我計劃使用asp.net mvc控制器爲私有部分返回模板html,爲公共部分返回整個html。我不想把任何邏輯到asp.net mvc控制器,除了獲取公共部分視圖的一些數據(字典集合)。所以是看到兩個可能的解決方案。如何從同一個項目的asp.net mvc控制器中獲取asp.net web api中的數據

  1. 創建ApiController並嘗試從中方法來獲取數據
    • 不喜歡這樣,因爲它破壞的RESTful風格和SoC(它的需要傳遞IUnityOfWofk實施DI下ASP.NET MVC的控制器構造,將其重定向到ApiController的構造函數)
    • 就像那樣,因爲它不需要花費時間來向http請求相同的主機(localhost)。
  2. 在http請求下獲取數據到ApiController的MVC控制器。
    • 就像這樣,RESTful和SoC是好的。
    • 不喜歡這樣做,因爲它花了時間到http請求到相同的主機(本地主機)。

我的問題是:

  1. 還有什麼可能的解決方案可以解決我(在.Net平臺)的任務呢?
  2. 如何向asp.net mvc控制器中的同一主機(本地主機)發送http請求,可能會影響客戶端瀏覽器(公共部分)的延遲時間,這對響應時間至關重要?
  3. 什麼是最好的解決方案1或2?

回答

3

另一種方法是將您的邏輯從Web API控制器分解爲單獨的類模型,並將其用於MVC和Web API控制器(例如,通過將相關邏輯類的實例注入到控制器中。你也可以分享工作單元。

當然,這增加了另一層複雜性,但同時導致更好的分離關注。畢竟,MVC和Web API只是將您的邏輯呈現給特定客戶端的一種方式。在Web API的情況下,Web API層的主要職責是爲您的邏輯創建一個RESTful接口;如果你非常嚴格,處理邏輯本身不是Web API層的任務。

我贊成這種做法在其他的這些方法有一些缺點(如數字在你的問題):

  1. 創建ApiController:你需要模擬網絡API環境很好。儘管這是可能的,但這也意味着Web API方面的變化會影響邏輯的實現。
  2. 做一個HTTP請求發送到Web API
    • 雖然在MVC控制器在同一臺服務器的請求可能會比較快,因此並不重要,這將需要一段時間是沒有必要的,如果你能只需要調用一些共享類。
    • 另外,HTTP請求會添加一個可能導致系統崩潰的點。
    • 此外,您將無法與Web API共享工作單元。
相關問題