Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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# 定制";资源描述“;ASP.NET Web API帮助页的一节_C#_Asp.net_Asp.net Web Api_Asp.net Web Api Helppages - Fatal编程技术网

C# 定制";资源描述“;ASP.NET Web API帮助页的一节

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返回了它没有返回的字段 其次,在附加信息列下,它显示了与用

我使用的是ASP.NETWebAPI,它可以方便地自动为我的API生成文档,但有些没有意义

以下面的屏幕截图为例

这是通过ID获取用户的端点,在
资源描述
部分,它显示了一个表,该表显示了用户模型的属性,因为我的控制器操作具有
[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)]
    等。