c# - ASP.Net MVC 4 WebAPI 自定义路由

标签 c# asp.net asp.net-mvc-4 asp.net-web-api

我的 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/

相关文章:

c# - Ajax Web 服务调用 - 不存在 'Access-Control-Allow-Origin' header

c# - 循环到 ListView 元素

c# - 添加时的 ObservableCollection + RaiseEvent

asp.net - 手动将 native DLL 复制到卷影复制目录是否安全?

jquery - 使用 Knockout 模板手动运行 JQuery Unobtrusive Validation

c# - 使用 MVC4 返回值的正确方法

c# - MVC 5 中的身份验证过滤器

c# - 将 long 转换为字节数组时 C# 和 Java 之间的差异

c# - WCF msmq 事务处理和工作单元

javascript - 单击时更改 div 的图像背景