2011-09-28 42 views
21

我有一個使用ASP.NET MVC3開發的網站。
我現在想公開一個REST API供其他人使用,它會公開與網站相同的功能。爲現有的基於MVC的網站創建REST API

在網站中,一旦用戶已經登錄並且針對數據庫驗證了憑據,會話將管理用戶的登錄狀態。
我該如何做與REST API等價的方法,其中暴露的許多方法需要用戶登錄(或至少有有效的用戶名和密碼)?

除此之外,網站的最佳方法是使用REST API(假設API涵蓋網站所需的所有功能)?

ASP.NET MVC3如何適合這一點 - 當然考慮到該網站已經存在使用這個框架?

回答

9

我寫了一篇關於如何[在ASP.NET MVC 3應用程序中構建RESTful API體系結構]年前的博客文章 ,並最終導致網站無法運行。 :( 如果你想利用打造的REST API到你的MVC應用程序這可能是一個良好的開端。

answer通過@tugberk使用的WebAPI一個很好的解決方案。

+0

是的,這是網絡上關於這個主題的最好的文章之一,我前幾天檢查過,真的很好,謝謝。 –

+2

我想鏈接已關閉。 –

+0

沒有太多的觀點是網絡上最好的文章,如果它不可訪問:( –

4

注:

WCF的Web API是現在的ASP.NET Web API,並已發生了很大變化。測試版 版本現已推出。欲瞭解更多信息:Getting Started With ASP.NET Web API - Tutorials, Videos, Samples

我會用WCF Web Api來做到這一點。 ASP.NET MVC也很好,並且能夠公開你的數據,但是如果你考慮將你的數據公開給你的用戶,那麼WCF Web Api就更有能力。它很容易使用和集成REST Web API到您的系統。

對於驗證,API密鑰始終是此類場景的最佳方式。這裏是你如何能實現與WCF的Web API API驗證一個很好的例子:

http://weblogs.asp.net/cibrax/archive/2011/04/15/http-message-channels-in-wcf-web-apis-preview-4.aspx

注:

他們剛剛發佈了預覽版5兩三星期前, 留言據我所知,通道已更改爲消息處理程序。但上面的文章應該給你一個想法。

出於安全的實現,下面可能有所幫助:

wcf Authentication Token Implementation - How to do

+0

您還可以看看我的博客上我是如何管理使用基本身份驗證使用jQuery見得到WCF [sameproblemmorecode] (http://sameproblemmorecode.blogspot.com/2011/10/creating-secure-restfull-wcf-service.html) – Luuk

1

ASP .NET MVC是一個很好的選擇。我創建了幾個ASP MVC,充當RESTful服務以及網站。

爲了總結我使用的設計範例,每個控制器都有一個操作,它發出所請求數據的JSON表示。所述數據被加載到服務器上的視圖模型中,內置的JSON序列化器負責服務器端,而jQuery視圖很好地加載數據以供我的實際網頁使用。

該站點本身在每個發出必要標記的控制器上都有索引操作,但不包含數據。頁面上的jQuery document.ready方法從本質上是我的其餘api中加載數據,但直接構建到網站中。

簽出書呆子晚餐爲偉大的示例代碼。 http://nerddinner.com/

關於安全性,我認爲我的經驗與您的不同。如果您的用戶全都在同一個域中並且擁有AD憑據,則ASP MVC與Active Directory非常好地集成。這是我使用的唯一方法,並且輕鬆,成功和滿意。

我有同事與其他API交互,在調用授權方法時發出令牌。接收到的令牌然後是客戶端負責存儲並回復每個請求,但我無法通過實現細節與您通話,因爲我沒有經驗。

+0

應該對數據加載更明確。我會建議你的文檔onready調用引發jquery.getJSON方法,將請求發回給爲你的JSON數據提供服務的控制器方法。附帶的好處是可以在之後返回AJAX數據的快速頁面加載。 – Evan

1

我會去基於WCF Web服務實現如下。

  • 總結所有的業務邏輯放到命名爲yourproject.businessservices例如
  • 創建一個Web服務的身份驗證,這將產生每不可重複的令牌一個單獨的dll項目用戶登錄
  • 此登錄存儲用戶的重要細節在如內存緩存緩存裏面應該有一個滑動過期
  • 如果用戶沒有訪問緩存讓我們說一個小時的令牌一起,緩存過期和用戶已註銷
  • 如果用戶正在使用它,緩存不斷得到擴展。

    在WCF服務方面,

  • 創建的API來返回認證

  • 所有WCF方法令牌將有哪些需要驗證這個會話ID

    的優點是, wcf方法可以暴露爲返回xml或json格式,也可以用作普通的Web服務。

    [WebInvoke(方法= 「GET」,ResponseFormat = WebMessageFormat.Xml,BodyStyle = WebMessageBodyStyle.Bare,UriTemplate = 「/ MyModule的/ XML /的GetData/{customerSessionId}」)] [WebInvoke(方法= 「GET」 ,ResponseFormat = WebMessageFormat.Json,BodyStyle = WebMessageBodyStyle。裹,UriTemplate = 「/ MyModule的/ JSON /的GetData/{} customerSessionId」)