在我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 }
);
我必须从ActionApi路由中删除action = ""
,否则其他控制器上的标准Get停止工作(即api / values)
api / test / active现在正在解析,但我现在得到一个500内部服务器错误/ api / test是否可以同时解析,所以api / test会返回“all”而/ test / active只返回“一些”?
答案 0 :(得分:0)
由于您有两个名为action的方法,因此可能会感到困惑。尝试删除或重命名其中一个,看看是否有效。
答案 1 :(得分:0)
一种方法是为参数
提供默认值[HttpGet]
public String Active(int id = 0)
{
var result = new List<string> { "active1", "active2" };
if (id == 0) {
return result;
} else {
return result[id];
}
}