【问题标题】:ASP.NET Core - API multiple parametersASP.NET Core - API 多参数
【发布时间】:2021-07-16 13:07:21
【问题描述】:

我有一个 AJAX 调用,其中主体有 3 个参数

  async calculateSalary() {
this.setState({ loadingCalculate: true });
const token = await authService.getAccessToken();
const requestOptions = {
    method: 'POST',
    headers: !token ? {} : { 'Authorization': `Bearer ${token}`,'Content-Type': 'application/json' },
    body: JSON.stringify({id: this.state.id, absentDays: this.state.absentDays, workedDays: this.state.workedDays})
};
const response = await fetch('api/employees/' + this.state.id + '/calculate',requestOptions);
const data = await response.json();
this.setState({ loadingCalculate: false,netIncome: data });
}

参数来自用 React.js 编写的表单

<div className="form-row">

{ this.state.typeId === 1? 
<div className='form-group col-md-6'>
  <label htmlFor='inputAbsentDays4'>Absent Days: </label>
  <input type='text' className='form-control' id='inputAbsentDays4' onChange={this.handleChange.bind(this)} value={this.state.absentDays} name="absentDays" placeholder='Absent Days' />
</div> :
<div className='form-group col-md-6'>
  <label htmlFor='inputWorkDays4'>Worked Days: </label>
  <input type='text' className='form-control' id='inputWorkDays4' onChange={this.handleChange.bind(this)} value={this.state.workedDays} name="workedDays" placeholder='Worked Days' />
</div>
}
</div>

现在我在等效端点中调试时,只有 ID 参数有值,其余返回 0。

   public async Task<IActionResult> Calculate([FromBody]int id, Decimal absentDays, Decimal workedDays)
    {
            //implementation
    }

请问如何才能使三个参数可用?删除 ID 是不可能的,因为它是我的必需参数之一。 JS 代码已经这样编写了,但我愿意接受任何建议。

【问题讨论】:

  • 您是否尝试将 [FromBody] 放在每个参数之前,而不仅仅是在 id 之前?

标签: c# reactjs asp.net-mvc asp.net-core .net-core


【解决方案1】:

你可以使用 get request ,它会更简单,但如果你仍然想发布你必须创建视图模型

public DaysViewModel
{
public int Id {get; set;}
public int AbsentDays {get; set;} 
public int WorkedDays {get; set;}
}

并修复操作

public async Task<IActionResult> Calculate([FromBody] DaysViewModel viewModel)
    {
            //implementation
    }

javascript

const token = await authService.getAccessToken();
const requestOptions = {
    method: 'POST',
    headers: !token ? {} : { 'Authorization': `Bearer ${token}`,'Content-Type': 'application/json' },
    body: { viewModel:  {id: this.state.id, absentDays: this.state.absentDays, workedDays: this.state.workedDays}}
};
const response = await fetch('api/employees/calculate',requestOptions);

【讨论】:

  • 谢谢。这行得通。由于 API 方法必须是 POST,因此需要使用视图模型。
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 2020-10-30
  • 1970-01-01
相关资源
最近更新 更多