【问题标题】:RedirectToRoute Not Working重定向路由不工作
【发布时间】:2017-04-02 04:22:44
【问题描述】:

环境:

我正在使用 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 是最小日期而不是原始日期。

我的解决方案:

为了避免再次从数据库中获取更新的对象并返回给用户。我已经有了通过传递 id 来返回对象的 get 方法。所以我只是改变了我的 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(object)。但是改成这个后我得到了以下异常;

请求的资源不支持 http 方法“PUT”。

响应状态为405,请帮我查找路由原因

【问题讨论】:

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


    【解决方案1】:

    您只需致电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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 2021-09-09
      • 1970-01-01
      • 2014-09-30
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多