将 [FromRoute] 和 [FromBody] 绑定到一个模型中
Bind [FromRoute] and [FromBody] into one model
我有这个端点
[HttpPost]
[Route("company/{companyid}/bankaccount")]
public async Task<Unit> AddCompanyBankAccount([FromBody]AddCompanyBankAccountCommand request)
{
return await _mediator.Send(request);
}
和型号
public class AddCompanyBankAccountCommand : IRequest<Unit>
{
public Guid CompanyId { get; set; }
public string BankName { get; set; } = String.Empty;
public string AccountNo { get; set; } = String.Empty;
public Guid CurrencyId { get; set; }
}
我希望我的端点类似于 POST contoso.com/company/{companyid}/bankaccount
,并且我想将 {companyid}
作为 Guid 从路由绑定到模型。如果没有自定义模型绑定,这可能吗?我正在使用 NET 6.0
我也看到了这个website,但它对我不起作用
我尝试了你提供的代码和webside,因为CompanyId
的类型是Guid
,所以当我post xxxx/company/8719AEDB-D34A-DAA3-E0C0-BA307F48F349/bankaccount
时,如网站的方法所示, 可以正常绑定。
但是,在您的问题中,当您 post xxxxx/company/123/bankaccount
时,您希望将 123
从路由绑定到模型,因为 123
的类型是 int
,CompanyId
的类型是Guid
,它们的类型不同,不能把Guid转成int,所以不能绑定。
您必须从控制器方法参数中删除所有 FromXXX
属性,而是在 class 本身中使用这两个参数。它看起来像这样:
[HttpPost]
[Route("company/{companyId:guid}/bankaccount")]
public async Task<Unit> AddCompanyBankAccount(AddCompanyBankAccountCommand request) { ... }
public class AddCompanyBankAccountCommand : IRequest<Unit>
{
[FromRoute]
public Guid CompanyId { get; set; }
[FromBody]
public BankAccount Account { get; set; }
}
public class BankAccount
{
public string BankName { get; set; } = String.Empty;
public string AccountNo { get; set; } = String.Empty;
public Guid CurrencyId { get; set; }
}
请注意,您更改了在 内部使用的模型 (因为您现在有一个嵌套的 class),而 public 界面(大摇大摆)保持不变。
如果您的 属性 是 guid,还要确保在您的路线中设置 guid 的类型约束。
我有这个端点
[HttpPost]
[Route("company/{companyid}/bankaccount")]
public async Task<Unit> AddCompanyBankAccount([FromBody]AddCompanyBankAccountCommand request)
{
return await _mediator.Send(request);
}
和型号
public class AddCompanyBankAccountCommand : IRequest<Unit>
{
public Guid CompanyId { get; set; }
public string BankName { get; set; } = String.Empty;
public string AccountNo { get; set; } = String.Empty;
public Guid CurrencyId { get; set; }
}
我希望我的端点类似于 POST contoso.com/company/{companyid}/bankaccount
,并且我想将 {companyid}
作为 Guid 从路由绑定到模型。如果没有自定义模型绑定,这可能吗?我正在使用 NET 6.0
我也看到了这个website,但它对我不起作用
我尝试了你提供的代码和webside,因为CompanyId
的类型是Guid
,所以当我post xxxx/company/8719AEDB-D34A-DAA3-E0C0-BA307F48F349/bankaccount
时,如网站的方法所示, 可以正常绑定。
但是,在您的问题中,当您 post xxxxx/company/123/bankaccount
时,您希望将 123
从路由绑定到模型,因为 123
的类型是 int
,CompanyId
的类型是Guid
,它们的类型不同,不能把Guid转成int,所以不能绑定。
您必须从控制器方法参数中删除所有 FromXXX
属性,而是在 class 本身中使用这两个参数。它看起来像这样:
[HttpPost]
[Route("company/{companyId:guid}/bankaccount")]
public async Task<Unit> AddCompanyBankAccount(AddCompanyBankAccountCommand request) { ... }
public class AddCompanyBankAccountCommand : IRequest<Unit>
{
[FromRoute]
public Guid CompanyId { get; set; }
[FromBody]
public BankAccount Account { get; set; }
}
public class BankAccount
{
public string BankName { get; set; } = String.Empty;
public string AccountNo { get; set; } = String.Empty;
public Guid CurrencyId { get; set; }
}
请注意,您更改了在 内部使用的模型 (因为您现在有一个嵌套的 class),而 public 界面(大摇大摆)保持不变。
如果您的 属性 是 guid,还要确保在您的路线中设置 guid 的类型约束。