我在名为JobController的控制器上有两个动作,它有这个路径前缀
[RoutePrefix("API/Job")]
第1个动作(按照控制器中的优先顺序)
[Route("{jobId}/{user}"), System.Web.Http.HttpPost]
public HttpResponseMessage AssignUser(long jobId, string user)
第二行动
[HttpPost]
[Route("{id}/comment/")]
public HttpResponseMessage SaveComment(string commentText, long id)
使用Postman向此路线发布帖子 - MyDomain/API/Job/11/Comment
- 评论文字值为" foo"匹配第一条路线,而不是我想要的路线。
为什么会发生这种情况?
答案 0 :(得分:0)
只是猜测,但我认为WebAPI无法区分路线1和2,因为"评论"也可以是用户名。您可以将第一条路线更改为:
[Route("{jobId}/users/{user}"), System.Web.Http.HttpPost]
public HttpResponseMessage AssignUser(long jobId, string user)
答案 1 :(得分:0)
这里的问题是两个动作都具有相同的动作(POST),相同数量的参数和相同类型的参数,因此首先匹配路线将获胜。
您的路线需要区分两条路线,因此您需要将路线更改为具有不同的动作(例如POST与PUT)或者您将一条路线更改为此类路线
[HttpPost]
[Route("{id}/comments/{comment}")]
public HttpResponseMessage SaveComment(long id, string comment)
希望这会有所帮助。
答案 2 :(得分:0)
最后我刚创建了单独的ViewModels
[HttpPost]
[Route("comment")]
public HttpResponseMessage SaveComment([FromBody] JobCommentViewModel viewModel)
public class JobCommentViewModel
{
public long JobId { get; set; }
public string Comment { get; set; }
}