我有一个Web API控制器ClientController
,我有一个方法ResetAllProgress
。我想将路径DELETE
上的api/client/progress
HTTP谓词映射到此方法。
我正在使用AttributeRouting
用于此目的因为我使用Web API 1.因此我在我的方法中添加了一个属性:[DELETE("api/client/progress", ControllerPrecedence = 1)]
我在启动期间暂停了我的应用程序,并发现Routes
集合中存在相应的路由。下面是IHttpRoute
对象的相关部分的JSON序列化:
{
Constraints: {
inboundHttpMethod: {
AllowedMethods: ["DELETE", "OPTIONS"]
}
},
DataTokens: {
httpMethods: ["DELETE", "OPTIONS"]
}
Defaults: {
controller: ClientController,
action: ResetAllProgress
},
RouteTemplate: "/api/client/progress",
Url: "api/client/progress"
}
但是,当我尝试向[{1}}发起DELETE
来电时,我收到 405 Method Not Allowed :
{ “消息”:“请求的资源不支持http方法'DELETE'。” }
如果我使用属性api/client/progress
来装饰ResetAllProgress
方法,则对[AcceptVerbs("DELETE")]
的调用会成功。据推测,如果另一个路由映射器存在,则会选择该属性,但我想将其专门路由到api/client/*
。我尝试添加api/client/progress
来抵消这种情况,但之后路线根本没有注册。
但是,当我向[NonAction]
发出POST
方法时,我会遇到异常:
找到符合请求的多项操作:
MyCompany.Api.ClientController类型上的System.Net.Http.HttpResponseMessage Post(MyCompany.Models.ViewModel.ClientViewModel)
System.Net.Http.HttpResponseMessage类型MyCompany.Api.ClientController上的ResetAllProgress()
MyCompany.Api.ClientController类型上的System.Net.Http.HttpResponseMessage ChangePassword(MyCompany.Models.ViewModel.ChangePasswordModel)
MyCompany.Api.ClientController类型上的Void SetDemo(MyCompany.Api.DemoViewModel)
该异常中的其他方法是不映射到api/client/progress
路由 - 或者不应该......我完全没有想法,我该怎么做才能出来了?