在我的TestController
我有以下内容:
[HttpGet]
public IEnumerable<String> Active()
{
var result = new List<string> { "active1", "active2" };
return result;
}
[HttpGet]
public String Active(int id)
{
var result = new List<string> { "active1", "active2" };
return result[id];
}
在RouteConfig
映射中是:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "", id = RouteParameter.Optional });
在浏览器中,以下请求有效:
api/test/active/1
但这会返回内部服务器错误:
api/test/active
您必须做什么才能以与默认 Get 类似的方式返回可能具有或不具有参数的操作?
更新 1 正如 Cuong Le 所建议的,改变路线的顺序有帮助,路线现在是:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
我必须action = ""
从 ActionApi 路由中删除,否则其他控制器上的标准 Get 停止工作(即 api/values)
api/test/active 现在正在解析,但我现在得到一个 500 Internal Server Error for /api/test 是否有可能同时解析,所以 api/test 将返回“all”而 /test/active 只返回“some” ?