【发布时间】:2017-09-25 19:08:01
【问题描述】:
我在 Asp.net Web api 2 项目中使用 ravenDb 时遇到了一个奇怪的问题。我有一个名为“TasksController”的控制器,其路由为“api/tasks”。与此相对应,我的 ravendb 中也有一个任务集合,其 ID 为“tasks/1000”。当您通过 http-post 创建新任务时,api 会按预期创建新任务并重定向到“tasks/{id}”路由。但是,由于新创建的任务的 ID 是“tasks/1029”,因此返回的重定向 URL 变为“../api/tasks/tasks/1029”,这显然不存在。请问有什么建议吗?
代码 发布方法
[HttpPost]
[Route("")]
public async Task<IHttpActionResult> Post([FromBody]Task task)
{
task.Notes.Add(DateTime.Now.ToString("F"));
await _repositoryFactory.TaskRepository.SaveTask(task);
await _repositoryFactory.SaveChanges();
return Redirect(Url.Link("Get", new {id = task.Id}));
}
获取
[HttpGet]
[Route("{id}", Name = "Get")]
public async Task<IHttpActionResult> Get(string id)
{
var task = await _repositoryFactory.TaskRepository.GetById(id);
return Ok(task);
}
POSTMAN - 发布请求
POST /Hoxro.Web.Api/api/tasks/ HTTP/1.1
Host: localhost
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 86fba9d3-cfcc-4060-226b-1db0eb189c7a
{
"priority": 1,
"notes": [
"02 January 2016 20:52:59"
],
"linkedTasks": [],
"createdOn": "02/01/2016",
"assignedTo": "TaskTestUser",
"matterIds": [],
"createdBy": "TaskTestUser",
"completionDate": null,
"dueDate": null,
"completed": false
}
结果 -
{
"message": "No HTTP resource was found that matches the request URI 'http://localhost/Hoxro.Web.Api/api/tasks/tasks/1091'.",
"messageDetail": "No action was found on the controller 'Tasks' that matches the name 'tasks'."
}
正确的结果应该是-http://localhost/Hoxro.Web.Api/api/tasks/1091
我知道这是因为 RavenDb Id 格式,但如果我不使用标准格式 加载相关文档真的很难或者我只是不知道如何?
【问题讨论】: