【发布时间】:2023-04-10 08:22:01
【问题描述】:
我需要编写 WebApi 控制器。任务是从现有的普通 mvc 控制器迁移到 WebApi 控制器。
在这个项目中,几乎所有的编程之美都被用到了:-
- 设计模式 - 存储库 + UOW、工厂 + nUnit
- 依赖注入
- 固体
这是我在MyApp.Domain 层中的模型
public class Customer
{
//please note that we are using Repository pattern & so no Data Annotations like Required, Key are not used here.
public int CustomerID { get; set;}
public string CustomerName { get; set;}
public string EmailAddress { get; set;}
// & so on
}
在MyApp.UI 层中,存在用于验证的 ViewModel,然后将模型传递给服务层。所以这就是我的 MVC 控制器的样子
public class CustomerVM
{
[Required]
public int CustomerID { get; set;} // & so on the other properties.
}
public ActionResult Registration(Customer VM)
{
if(Modelstate.IsValid)
{
//call service layer
}
else
{
}
}
现在我的当务之急是将这个控制器迁移到 WebApi 控制器。
此后,我创建了一个单独的项目为MyApp.WebApi
现在我的疑问是我应该如何将模型传递给这个 WebApi 控制器。
我正在考虑将 ViewModel 从 UI 层分离以分离
项目为MyApp.ViewModels,并将所有视图模型放在这一层
& 引用 UI 层和 WebApi 层中的 dll。
public string POST([FromBody]CustomerVM customer)
{
if(Modelstate.IsValid)
{
//call the other service layer which will take care of DB handling
return "Success";
}
else
{
return "Error";
}
}
这是正确的做法吗?还有其他正确的做法吗?
【问题讨论】:
-
你这样做应该没问题。
-
@YashveerSingh,你确定吗??
-
所以如果这是我所理解的。您想将现有的 MVC 项目转换为 WebApi 。因此,您可以像在 VC 项目中使用的那样使用现有的视图模型,web api 可以像 mvc 一样进行模型绑定。
-
@YashveerSingh 是的。你得到了我的要求。
-
好的,所以重用同一个虚拟机应该不是问题。但我有一个问题,您是否打算拥有一个新的客户端 UI。我的意思是你要创建一个使用 webapi 的 nee 客户端应用程序吗?
标签: c# asp.net-mvc design-patterns asp.net-web-api dependency-injection