使用 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] 中删除了参数,一切都按预期工作。
我正在构建一个基于 .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] 中删除了参数,一切都按预期工作。