![](/img/trans.png)
[英]Web Api 2 Routing Issue: “No action was found on the controller…”
[英]Web Api controller routing
我有一个ConfigurationController,其静态Register方法中指定了默认路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
此端点的POST方法创建一个新的配置,其字符串ID可通过url访问 - 'api / configuration / newid'。
每个配置都可以有一个与之关联的“任务”。 我现在想通过'TaskController'公开任务的CRUD操作。 因此,如果我想为'newid'创建一个新任务,我可以通过在'api / configuration / newid / task'进行POST来实现
我不知道如何在我的Web API项目中为此指定路由。
WebAPI设置为RESTful; 也就是说,您使用HTTP Verbs与控制器通信而不是命名操作(即newconfig
)。
所以,要走你已经去的路线,而不是点击api/configuration/newconfig/task
,你可能只是点击api/configuration
并发送带有HTTP POST
动词的请求。 然后,您发送的消息可能包括您正在创建的消息,例如:
{
type: 'Task',
data: {
}
}
但是,最好将Tasks
分成他们自己的控制器,即TasksController
,它们有自己的GET, PUT, POST, DELETE
动词,它们只对Tasks
。 然后,您将通过调用api/Tasks/
创建新Tasks
,并将消息正文作为您所需的任务。
路由应该是什么样的?
routeTemplate: "api/configuration/{id}/task"
这也是正确的方法,或者我应该通过显式端点'api / task'来公开任务,尽管任务不能孤立存在。 它们始终绑定到配置。
当你声明Each configuration can have a 'Task' associated with it.
时,我认为你已经回答了这个Each configuration can have a 'Task' associated with it.
如果您保持控制器“轻量级”并确保业务逻辑保存在其他位置,则添加新路由/控制器/操作变得微不足道。
如果您愿意,可以将其保留在ConfigurationTasks
控制器中,同时仍具有Configuration
和Task
控制器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.