C# 定制";资源描述“;ASP.NET Web API帮助页的一节
我使用的是ASP.NETWebAPI,它可以方便地自动为我的API生成文档,但有些没有意义 以下面的屏幕截图为例 这是通过ID获取用户的端点,在C# 定制";资源描述“;ASP.NET Web API帮助页的一节,c#,asp.net,asp.net-web-api,asp.net-web-api-helppages,C#,Asp.net,Asp.net Web Api,Asp.net Web Api Helppages,我使用的是ASP.NETWebAPI,它可以方便地自动为我的API生成文档,但有些没有意义 以下面的屏幕截图为例 这是通过ID获取用户的端点,在资源描述部分,它显示了一个表,该表显示了用户模型的属性,因为我的控制器操作具有[ResponseType(typeof(user))]注释 首先,在我实际的控制器操作中,为了不暴露敏感信息,我在向用户显示结果之前剥离了Password属性。因此,资源描述部分中给出的表是不正确的,它表示我的API返回了它没有返回的字段 其次,在附加信息列下,它显示了与用
资源描述
部分,它显示了一个表,该表显示了用户模型的属性,因为我的控制器操作具有[ResponseType(typeof(user))]
注释
首先,在我实际的控制器操作中,为了不暴露敏感信息,我在向用户显示结果之前剥离了Password
属性。因此,资源描述
部分中给出的表是不正确的,它表示我的API返回了它没有返回的字段
其次,在附加信息
列下,它显示了与用户
模型相关的验证规则。方便,但在本例中根本不相关,因为此端点用于GET
ing用户,而不是POST
ing用户
所以,我的问题是如何定制这个资源描述表来指定返回哪些字段,并隐藏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)
{
// ...
}
//
///获取由ID标识的单个用户。
///
///用户的ID。
///关于用户的数据收集。
[响应类型(用户类型))]
[路由(“api/v1/users/{userId}”,Name=“GetUser”)]
[HttpGet]
公共IHttpActionResult GetUser(int userId)
{
// ...
}
我已经将帮助页面配置为从XML文件中读取文档,该文件是在我构建项目时从这些/
注释构建的
谢谢 在传统的MVC应用程序中,视图模型是从控制器返回到视图引擎的模型。在Web API应用程序中,视图模型是向API使用者公开的模型
现在,您使用的是数据模型作为视图模型
将视图模型与数据模型分开有很多原因:
安全性:确保敏感数据(如密码)不会意外暴露
Web API接口和数据库数据之间的数据差异(例如,Web API接口中的enum
与数据库中的int
)
有助于确保即使内部数据结构发生变化,web API接口也保持一致
允许您区分GET
和POST
方法之间的数据。例如,某些数据可能是在POST
ing时确定的,例如记录创建日期。该数据可以从GET
返回,但您不希望它包含在POST
中
你已经找到了原因1和原因2
您的解决方案应该是:
创建一个新类作为视图模型。现在,您有了一个User
数据模型类。创建一个UserViewModel
类(随意命名)李>
向此类添加应向用户公开的成员。不要在您的案例中包含密码李>
添加适合在自动生成的帮助中查看的注释李>
将数据从User
类复制到UserViewModel
类,并从控制器返回UserViewModel
类
如何添加这些注释?向视图模型添加数据注释属性,例如[必需]
,[字符串长度(6)]
等。