使用 Swagger/Swashbuckle 创建用于插入记录的 Web 服务接口的正确方法是什么?

What is the correct way to create webservice interface for inserting records using Swagger/Swashbuckle?

我正在构建一个基于 .Net 的 Web 服务(使用 Swagger 和 Swashbuckle)。 我是这些工具的新手,在公开插入数据的调用时遇到了一些问题。

这是我的数据模型 class 在服务器上的样子:

public class User 
{
  public long? UserCode { get; set; }
  public string UserName { get; set; } = string.Empty;
  public string EmailAddress { get; set; } = string.Empty;
  public string SomeOtherField1 { get; set; } = string.Empty;
  public string SomeOtherField2 { get; set; } = string.Empty;
}

这是我的服务定义(控制器)的样子:

[Authorize]
[Route("api/[controller]")]
public class AuditSettingUserController : Controller
{
  private AppSettings AppSettings { get; set; }

  public AuditSettingUserController(IOptions<AppSettings> settings)
  {
    AppSettings = settings.Value;
  }

  [HttpPut()]
  [Route("api/DashboardSettings/CreateUser/{userrecord}")]
  public void CreateUser(User userrecord)
  {
  } 
}

这是从客户端调用的样子:

IO.Swagger.Api.SettingUserApi dsApi = new IO.Swagger.Api.SettingUserApi("http://localhost:56995");
IO.Swagger.Model.User record = new IO.Swagger.Model.User()
{
   UserCode = 100,
   UserName = "Foo",
   EmailAddress = "Foo2"
};
string sSerializedRecord = JsonConvert.SerializeObject(record);
dsApi.ApiSettingUserApiSettingsCreateUserByUserrecordPut(sSerializedRecord);

一切都成功构建并且运行没有错误。

但是有两个问题。 首先,当我在客户端查看生成的代码中的服务调用方法定义时,我有点困惑。我不明白生成的原型。

定义如下:

public void ApiSettingUserApiSettingsCreateUserByUserrecordPut (string userrecord, long? userCode = null, string userName = null, string emailAddress = null, string SomeOtherField1 = null, string SomeOtherField2 = null)

其次,在服务器端,传入的记录为空。 (记录不为空,但里面的值为null/empty)。

我在这里做错了什么?我的服务调用没有正确定义其参数吗?

谢谢

问题出在服务方法定义及其装饰上。

[HttpPut()]
[Route("api/DashboardSettings/CreateUser/{userrecord}")]
public void CreateUser(User userrecord)
{
} 

应该是:

[HttpPut()]
[Route("api/DashboardSettings/CreateUser")]
public void CreateUser(User userrecord)
{
} 

通过在 [Route] 定义中包含方法参数,该方法期望参数成为命令行的一部分。 我从 [Route] 中删除了参数,一切都按预期工作。