我正在使用ASP.NET Web,它可以方便地为我的API自动生成文档,但其中有些没有意义。
以下面的截图为例。
这是GET
用户的ID端点,在Resource Description
部分,它显示了一个表,该表显示了用户模型的属性,因为我的控制器操作有[ResponseType(typeof(User))]
注释。
首先,在实际的控制器操作中,为了不公开敏感信息,在向用户显示结果之前,我要去掉Password
属性。因此,在Resource Description
部分中给出的表是不正确的,它说我的API返回它没有返回的字段。
其次,在Additional Information
列下面显示了与User
模型一起的验证规则。方便,但在这种情况下根本不相关,因为这个端点是用于GET
对用户,而不是POST
对一个用户。
因此,我的问题是如何自定义这个Resource Description
表以指定返回哪些字段,并隐藏EF验证?
目前,我已经对我的控制器操作进行了如下评论:
/// <summary>
/// Get a single user identified by ID.
/// </summary>
/// <param name="userId">The ID of the user.</param>
/// <returns>A data collection about the user.</returns>
[ResponseType(typeof(User))]
[Route("api/v1/users/{userId}", Name="GetUser")]
[HttpGet]
public IHttpActionResult GetUser(int userId)
{
// ...
}
我已经将帮助页面配置为从一个XML文件中读取文档,该文档是在我构建项目时从这些///
注释生成的。
谢谢!
发布于 2015-04-19 10:39:21
在传统的MVC应用程序中,视图模型是从控制器返回到视图引擎的模型。在Web应用程序中,视图模型是向API使用者公开的模型。
就像现在一样,您正在使用数据模型作为视图模型。
将视图模型与数据模型分开有许多原因:
enum
与数据库中的int
)。GET
和POST
方法之间的数据。例如,某些数据可能是在POST
执行时确定的,例如记录创建日期。该数据可以从GET
返回,但您不希望它包含在POST
中。你已经达到了第一和第二条理由。
你的解决办法应该是:
User
数据模型类。创建一个UserViewModel
类(任意命名)。Password
。User
类复制到UserViewModel
类,并从控制器返回UserViewModel
类。https://stackoverflow.com/questions/29730774
复制相似问题