环境:
我在WebAPI工作。我实现了所有CRUD方法。
情境:
在PUT方法中,我排除了一些像'CreatedDate'这样的属性要更新。我的代码如下;
[Route("")]
public async Task<IHttpActionResult> Put(MyModel myModel)
{
//Parsing to Business Entity
var item = TheFactory.Parse(myModel);
bool result = await _myBL.UpdateLab(item);
if (!result)
{
return BadRequest("Error in Save");
}
//Converting to view model and return
return Ok(TheFactory.Create(item));
}
问题:
这里我没有从用户那里获得CreatedDate。因此它总是最小日期。在DAL中,我将此字段指定为未修改,因此它始终具有创建的数据值。作为回报,我将从给定的模型用户转换为viewmodel。所以CreatedDate是最小日期不是原创日期。
MySolution:
因此,要避免再次从数据库中获取更新的对象并返回给用户。我已经有get方法通过传递id返回对象。所以我只是改变了我的PUT方法,如下所示;
[Route("")]
public async Task<IHttpActionResult> Put(MyModel myModel)
{
//Parsing to Business Entity
var item = TheFactory.Parse(myModel);
bool result = await _myBL.UpdateLab(item);
if (!result)
{
return BadRequest("Error in Save");
}
//Redirect to getbyid method
return RedirectToRoute("GetById", new { id = item.Id });
}
问题:
这里我想我可以重用方法get方法,所以它也返回ok(对象)。但在改为这之后我得到了以下异常;
请求的资源不支持http方法'PUT'。
响应状态为405.请帮我找到路由
答案 0 :(得分:0)
您只需致电GetById(item.id)
[Route("")]
public async Task<IHttpActionResult> Put(MyModel myModel)
{
//Parsing to Business Entity
var item = TheFactory.Parse(myModel);
bool result = await _myBL.UpdateLab(item);
if (!result)
{
return BadRequest("Error in Save");
}
return GetById(item.Id);
}