我的 WebAPI 项目中有一个名为 News 的 Controller ,我有两个名为 Get 的默认操作,用于处理以下 URL:
/api/News <- 这将返回新闻列表 /api/News/123 <- 这通过 id 返回一个特定的新闻项目。
到目前为止一切都很简单,显然默认路由可以处理这些情况。接下来我想要一个如下所示的 URL:
/api/News/123/Artists <- 将返回与指定新闻项目相关的所有艺术家。
现在我对 ASP.Net MVC 和 WebAPI 还是个新手,所以这是我第一次不得不处理路由。我已将默认路由修改为如下所示:
routes.MapRoute(
name: "Default",
url: "{controller}/{id}/{action}",
defaults: new { controller = "News", action = "Get", id = UrlParameter.Optional }
所以在这里,我将 {action} 移到了 URL 的末尾,并向我的新闻 Controller 添加了一个 Artists 方法。这仍然适用于前两种情况,但对于第三种情况返回 404。
显然路由不适用于/api/News/123/Artists,但我不知道为什么。
我似乎找不到任何人像这样使用 WebAPI 的例子,这让我觉得我做的事情从根本上是错误的。
如有任何帮助,我们将不胜感激。
最佳答案
问题是,您正在尝试访问 Web API 但映射 ASP.NET MVC
这是您需要的映射:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new {controller = "News", action = "Get", id = RouteParameter.Optional}
);
并且应该在 App_Start\WebApiConfig
中完成(如果使用默认模板设置)
方法示例(在您的新闻 API Controller 中):
// GET api/values/5
public string Get(int id)
{
return "value " + id;
}
// GET api/values/5
[HttpGet]
public string Artist(int id)
{
return "artist " + id;
}
关于c# - ASP.Net MVC 4 WebAPI 自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836382/