我有一个控制器(RequestsController
)有几个动作(都是一个参数)
例如:
public List<Models.AcceptRequests> GetAllAcceptRequests(int passedId)
public List<Models.Requests> GetAllRequests(int passedId)
public List<Models.CancelRequests> GetAllCancelRequests(int passedId)
我从jQuery
ajax
调用了以下所有这些操作:
var s = { passedId: 0, } $.ajax({ url: "../api/Requests/GetAllAcceptRequests", type: "GET", dataType: 'json', data: JSON.stringify(s), contentType: "application/json; charset=utf-8", success: function (response) { vm.Requests(ko.utils.unwrapObservable(ko.mapping.fromJS(response))); } });
我收到以下错误:
Multiple actions were found that match the request: System.Collections.Generic.List1 [TCMSWeb.Models.Requests] GetAllRequests(Int32)
据我了解,无论与其他操作冲突的参数如何,您都可以拨打controller
action
。
那不是这样吗?
如何在不必为每个controller
action
指定唯一数量的参数的情况下调用每个 public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
?
修改
{{1}}
{{1}}
答案 0 :(得分:0)
据我了解,无论与其他操作冲突的参数如何,您都可以调用控制器操作
不,这种理解是错误的。这只会让C#编译器开心,但在ASP.NET MVC中无效。您无法在同一个控制器上使用相同的名称执行2个具有相同名称的控制器操作,只需使用相同的HTTP谓词,无论他们采用何种参数。
答案 1 :(得分:0)
更改WebApiConfig.cs中的Register方法。
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
这将启用RPC样式路由。另外,改变你的jQuery调用,就像这样。 1234只是硬编码数据,它将绑定到passId参数。
$.ajax({
url: "../api/Requests/GetAllAcceptRequests?passedid=1234",
type: "GET",
dataType: 'json',
success: function (response) {
vm.Requests(ko.utils.unwrapObservable(ko.mapping.fromJS(response)));
}
});
如果您将路线映射更改为
,也可以使用url: "../api/Requests/GetAllAcceptRequests/1234"
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{passedid}",
defaults: new { passedid = RouteParameter.Optional }
);