在Asp.net Web api 2項目中使用ravenDb時遇到了一個奇怪的問題。我有一個名爲「TasksController」的控制器,其路徑爲「api/tasks」。與此相對應,我在ravendb中還有一個任務集合,其中包含像「tasks/1000」這樣的Ids。當您通過http-post創建新任務時,api會按預期創建新任務並重定向到「任務/ {id}」路線。但是因爲新創建的任務的Id是「tasks/1029」,所以返回的重定向URL變成了「../api/tasks/tasks/1029」,這顯然不存在。有什麼建議嗎?web api url與ravenDb Id格式衝突
代碼 POST方法
[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);
}
郵差 - 發佈採購信息
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格式的,但如果我不加載相關文件的標準格式它真的很難去還是我只是不知道如何?
由於瓦迪姆。標題是正確的,但是我認爲問題仍然存在,例如Url.link會生成book/book/123。這更多是因爲Ravndb比其他任何事情都重要。 - 歡呼 –
您正在查看請求標題。 Url.Link撰寫網址,我認爲它與您的當前網址連接。您是否嘗試使用「RedirectToRoute」或第二種解決方案?它是否完成相同的結果'http://localhost/Hoxro.Web.Api/api/tasks/tasks/1091'? –