【发布时间】:2014-09-28 11:02:39
【问题描述】:
我觉得我的路由、控制器和调用都是正确的,但仍然无法弄清楚为什么我会收到“多项操作”错误。控制器本身调用服务总线,但我无法让它达到 GetJob 的断点。有什么想法吗?
路线:
public class WebApiInitializer : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
RouteTable.Routes.MapHttpRoute(
"webapimethodroutes",
"api/msi/{controller}/{action}",
defaults: new {}
);
}
}
我的工作控制器:
public class SBJobController : ApiController, IJobsController
{
[HttpPost]
public CreateJobResponse CreateJob(CreateJobRequest request)
{
return BusProxy.Call<CreateJobRequest, CreateJobResponse>(request);
}
[HttpPost]
public GetJobResponse GetJob(GetJobRequest request)
{
return BusProxy.Call<GetJobRequest, GetJobResponse>(request);
}
}
我的角度服务调用:
function getJobs(pRequest) {
var request = pRequest || {
'Ids': [],
'JobNumbers': [],
'PageNumber': 1,
'PageSize': 20,
};
return $http.post('/api/msi/SBJob/GetJob', request).error(function (data, status, headers, config) {
//logError(data);
});
}
请求对象:
public class CreateJobRequest : RequestBase
{
public JobEntity Job { get; set; }
public AddressEntity Address { set; get; }
}
public class GetJobRequest: RequestBase, IPageable
{
public int PageNumber { set; get; }
public int PageSize { set; get; }
public List<Guid> Ids { set; get; }
public List<string> JobNumbers { set; get; }
public Guid ChildOfCustomer { set; get; }
public Guid ChildOfContact { set; get; }
public JobTypeEnum JobType { get; set; }
}
我得到的确切错误:
{
"Message": "An error has occurred.",
"ExceptionMessage": "Multiple actions were found that match the request: \r\nCreateJob on type MSI.ServiceBus.ServiceControllers.SBJobController\r\nGetJob on type MSI.ServiceBus.ServiceControllers.SBJobController",
"ExceptionType": "System.InvalidOperationException",
"StackTrace": " at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
}
【问题讨论】:
-
GetJobRequest和CreateJobRequest对象是什么样的?我认为也许它们都符合您的请求对象 -
为什么是GetJob HttpPost?
-
不,它们是不同的。它必须是 Post,因为我们使用的服务总线不接受 GET 请求中的参数
-
我们仍然缺少一些信息。只有一条路线和一项操作,您不会收到“多项操作...”错误。仅针对您想要执行的操作发布代码并不能帮助我们了解为什么它会针对您未发布的其他操作之一。
-
我发布了两个操作对吗? GetJob 和 CreateJob。至于路线,是的,这是我唯一的路线。
标签: c# .net asp.net-web-api asp.net-web-api-routing