使用ASP.NET WebApi公开现有服务层

时间:2014-05-03 22:26:44

标签: c# asp.net asp.net-mvc angularjs asp.net-web-api

我目前有一个分层架构,如下所示:

  1. 服务层 - 这是与域的主要交互点。 包含所有业务规则,验证等。
  2. 数据/存储库层 - 这是处理数据所有持久性的层。不包含业务逻辑或验证。基本上包含Repository<T>UnitOfWork(特定于EF)以及所有EF内容,例如DbContextEntityTypeConfiguration等。
  3. 实体框架
  4. SQL Server
  5. 我使用的是贫血领域模型,所以代表问题领域的基本POCO。

    关于通过ASP.NET WebApi公开此问题,我有几个问题。

    1. 安全生活在哪里?基本上,用户可以访问编辑记录或记录类型。用户是否可以执行特定操作等。以及身份验证/基于角色的授权等。
    2. 我应该使用WebApi作为实际服务层,还是使用它以RESTful方式通过HTTP公开现有服务层?
    3. 给出一个更改类别名称的基本示例,我在哪里强制当前用户有权更改所述记录?我依靠Thread.CurrentPrincipalIdentity检查给定角色,并在WebApi中设置它吗? Mvc申请?
    4. 那里有什么好的例子可以说明我所说的这种情况吗?

      BTW - 我使用ASP.NET MVC 5来提供应用程序的shell(SPA),然后前端将是所有AngularJS。

1 个答案:

答案 0 :(得分:1)

关于您的服务应该具有正确答案的第一个问题,我认为它应该是所有应用程序中的原则:

  

服务应具有足够的安全性来保护数据免受不受欢迎的用户的侵害

一旦您创建服务并将其公开,您就会面临可能的攻击,当然,复杂的安全规则可能会增加开发时间,而某些情况可能会导致性能下降;衡量威胁的级别并相应地规划您的安全性。

WebApi是为了通过Http / Rest提供服务而创建的,所有原则和功能内置都是用这个意图制作的,所以对于你的第二个问题,就像你在最后推断它是一个服务层但是一个Http /休息服务层。

WebApi使用属性Authorize来强制执行安全性,因为.NET框架通常可以从中继承并扩展它。您可以详细了解here

由于您使用的是Angularjs,即使您需要MVC5来使用WebApi,我的建议是您不使用MVC剃须刀或任何其他服务器技术来呈现您的页面。