2011-09-28 39 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”)