我使用ASP .NET Web Api创建了一个restful api,我在设置路由时遇到了问题。路由不能按预期工作
问题1:我正在尝试设置自定义删除路线。如果我在我的控制器“DeleteTargetFromApplication”上命名我的操作,它可以很好地工作,但如果我将操作命名为“RemoveTargetFromApplication”,它会给我一个“请求的资源不支持http方法'DELETE'”错误。除了名字,我什么都不改变。我使用的路线是这样设置的:
config.Routes.MapHttpRoute(
name: "PesticideRemoveTargetFromApplication",
routeTemplate: "Pesticide/Applications/{id}/Targets/{targetId}",
defaults: new { controller = "Applications", action = "DeleteTargetFromApplication" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Delete) }
)
有没有我没有得到关于Web Api如何匹配路线?
问题2:我有Get,Post,Put,Delete,Patch的所有默认路由。在默认值上面,我在上面创建了默认设置的任何特殊路由。出于某种原因,当我添加:
config.Routes.MapHttpRoute(
name: "PesticideGetTargetsForApplication",
routeTemplate: "Pesticide/Applications/{id}/Targets",
defaults: new { controller = "Applications", action = "GetTargetsForApplication" },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
默认值以上,这是说我有匹配的“GetTargetsForApplication”行动和默认的“获取”行动我把所有控制器上两个动作。为什么看到这两种行为,即使我具体告诉它要使用哪个动作。路线模板明显不同于“Applications /:id/Targets”和“Applications”。为什么这些混合起来?
我已编辑您的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –