【发布时间】: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