在WebApi和MVC控制器之间共享逻辑?

时间:2013-12-17 23:37:56

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

我的应用程序有MVC控制器和WebApi控制器。到目前为止,我已经能够将控制器之间共享的任何逻辑分别推送到BaseControllerBaseApiController

现在我的情况是API控制器和MVC控制器都在做同样的事情 - 注册一个新的用户帐户。这个过程有点复杂,因为我有一个多租户应用程序,看起来像这样:

// MVCController : BaseController
public ActionResult Register(RegisterModel model) {
      // see if the model is valid
      // check and make sure the credentials check out with policy requirements
      // add the user to the user table if they aren't already there
      // create a tenancy
      // assign cookie
 }

大多数实际工作被推送到服务层,但是调用和条件占用了大约20行代码,我宁愿不复制并粘贴到类似的WebApi控制器中。

所以我想知道我是否可以以某种方式让我的BaseControllerBaseApiController从一个通用控制器继承,我可以放置这个auth代码。这里推荐的方法是什么?

2 个答案:

答案 0 :(得分:4)

除非我遗漏了你的问题,否则我会将这段代码重构为一个存在于UI项目中的Util类。然后你的MVC控制器和WebAPI控制器都可以调用它。

此方法符合Composition over inheritance design principle

答案 1 :(得分:0)

如果你不能将逻辑移到它自己的库中然后分享它,那么我可能会看到从mvc调用web api。有关这样做的示例,请参阅此帖子:https://stackoverflow.com/a/13206631/426422