Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WebApi和MVC控制器之间共享逻辑?_C#_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

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

C# 在WebApi和MVC控制器之间共享逻辑?,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Asp.net Web Api,我的应用程序有MVC控制器和WebApi控制器。到目前为止,我已经能够将控制器之间共享的任何逻辑分别推入BaseController和BaseApiController 现在我遇到了一个API控制器和MVC控制器都在做同样的事情——注册一个新的用户帐户。这个过程有点复杂,因为我有一个多租户应用程序,看起来像这样: // MVCController : BaseController public ActionResult Register(RegisterModel model) {

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

现在我遇到了一个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控制器中


因此,我想知道我是否可以以某种方式让我的
BaseController
BaseApiController
继承自一个通用控制器,我可以在其中放置此身份验证代码。这里推荐的方法是什么?

如果您不能将逻辑移到它自己的库中,然后共享它,那么我可能会考虑从mvc调用web api。请参阅这篇文章以获得一个这样做的示例:

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


这种方法符合。

是的。。。我绝对不喜欢把它推到自己的库中,或者把调用推到HTTP领域。如果这是我仅有的两个选择,我宁愿复制代码:/you's担心什么?第一种方法的解决方案开销,第二种方法的性能。我知道这是最小的,但我宁愿重复代码,也不愿添加一堆毫秒。我疯了吗?Web API被简化了。复制代码通常是不好的。看看这篇文章:是的,我会把帐户注册码拉到另一个类/接口中,这样你就可以重用它了。如果您为它定义了一个接口,您将使您的代码更易于测试,并且符合控制反转原则。