RedirectToRoute不起作用

时间:2017-04-02 04:22:45

标签: c# asp.net-web-api routing

环境:

我在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.请帮我找到路由

1 个答案:

答案 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);
}