Lee*_*ale 7 c# asp.net asp.net-mvc-4 asp.net-web-api
我的WebAPI项目中有一个名为News的控制器,我有两个名为Get的默认操作,它处理以下URL:
/ api/News < - 这将返回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 }
Run Code Online (Sandbox Code Playgroud)
所以我在这里将{action}移到了URL的末尾,并在我的News控制器中添加了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}
);
Run Code Online (Sandbox Code Playgroud)
它应该在App_Start \ WebApiConfig(如果使用默认模板设置)中完成
方法示例(在您的新闻API控制器中):
// 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7108 次 |
| 最近记录: |