2012-03-12 24 views
4

我正在嘗試創建一個SPA應用程序,以利用upshot及其功能。但是,暴露數據的服務(即Web API)位於完全獨立的項目中,並已託管在IIS上。我想將upshot綁定到現有的API,但從HTML幫助器中可以看到的upshot(v1.0.0.1),您需要傳入公開數據的控制器的類型,如下所示:將upshot綁定到不同項目中的Web API

Html.UpshotContext.DataSource(Of ToDoController)(Function(x) x.GetTodoItems())

其中ToDoController是暴露該數據,在同一項目中定義的ApiController。

我的問題是,如何將upshot綁定到不在同一個項目中的Web API? 有什麼方法可以使用助手,還是我必須手動執行所有操作?

我可以訪問模型類(即的TodoItem),因爲他們是在一個單獨的組件,它可以從兩個項目(SPA &的Web API)來引用,但我沒有訪問控制器在Web API項目中定義。

回答

5

您可以使用以下方法:

upshot.dataSources = upshot.dataSources || {}; 

upshot.metadata({"ModelType:#Namespace": 
    { 
    "key":["Id"], 
    "fields":  
     {"Id":{"type":"Int32:#System"}, 
     "IpAddress":{"type":"String:#System"}, 
     "Name":{"type":"String:#System"} 
     } 
    } (and so on, just map everything) 
}); 

var dataSource = new upshot.RemoteDataSource({ 
    providerParameters: 
     { url: "Your URL", 
      operationName: "Method Name, example: GetCustomers" }, 
    entityType: "ModelType:#Namespace", 
    bufferChanges: true (or false, whatever you like), 
    dataContext: undefined, 
    mapping: {} 
}); 

如果我是你,如果我能我會暫時建立在它與控制器項目的解決方案,那麼我會檢查由UpshotContext幫手產生的JS和將其複製到您的網頁中(無論如何,我都會這樣做)。

+0

我真的希望能有一個更好的解決方案:(我不知道他們是否會在將來做出這樣的選擇(用於消耗服務不是由你實現的服務以及你無法訪問的控制器) – 2012-03-13 15:39:40

+0

我敢打賭,他們會讓「Web API」在經典的Web服務(發佈wsdl文件)時發現同樣的方式。但是,如果wsdl沒有發佈或不可訪問,您最終會寫你自己的佈線代碼如果你想知道它是如何在後臺工作是一件好事;) – Tallmaris 2012-03-13 17:11:05

+1

我同意知道底下發生了什麼是很好的,但它也是一個痛苦,以維護和更新所有內容在服務器端發生更改時採用一致的方式。畢竟,'UpshotContext'幫手試圖提供這一點,它只是需要一些更多的改進imho :) – 2012-03-14 13:28:13

相關問題