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



我正在构建基于.NET的Web服务(使用Swagger和Swashbuckle(。我是这些工具的新手,并且在公开插入数据的呼叫中遇到了一些问题。

这是我的Datamodel类在服务器上的样子:

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)

其次,在服务器端,传递的记录为空。(记录不是空的,但内部的值为空/空(。

我在这里做错了什么?我没有服务电话,其参数正确定义了吗?

谢谢

问题是服务方法定义及其装饰。

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

应该是:

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

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

最新更新