我正在构建基于.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)
{
}
通过将方法参数包含在[路由]定义中,该方法期望该参数成为命令行的一部分。我从[路由]中删除了参数,所有参数都按预期工作。