asp.net-mvc - ASP.NET MVC 4 ApiController 和普通 Controller 路由

标签 asp.net-mvc asp.net-mvc-4 asp.net-apicontroller

我有一个仅用于向我们的应用程序发送 API 请求的项目,我们使用的是 ASP.NET MVC 4 项目。我们有一些从 ApiController 派生的 Controller 和从普通 Controller 类派生的其他 Controller 。问题是我不想为 api/XXXXX/ 的 ApiControllers 设置默认路由。 .我希望 ApiController 与非 Api Controller 使用相同的路由,即 {controller}/{action}/{id} .我尝试添加以下路线

routes.MapHttpRoute(
    name: "Api",
    routeTemplate: "{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这将使我的 ApiControllers 可以使用正常的 {controller}/{action} 访问。路由但“正常” Controller 不再可访问。如果我去掉 MapHttpRoute相反的情况发生。

有什么办法可以通过相同的 url 路由访问 ApiControllers 和“普通” Controller ?

最佳答案

根据我所见,唯一可以做到这一点的方法是明确命名每个 API Controller 。下面我有一个 Some ApiController 类。

routes.MapHttpRoute(
    name: "SomeApiController",
    routeTemplate: "SomeApi/{action}/{id}",
    defaults: new { controller = "SomeApi", id = RouteParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

关于asp.net-mvc - ASP.NET MVC 4 ApiController 和普通 Controller 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420878/

相关文章:

c# - 如何从发送到 ASP.NET 核心 2.0 API Controller 操作的请求中获取身份验证 header

asp.net-mvc - Swagger 仅适用于 apicontroller,而不适用于 mvc Controller ?

ajax - API Controller Post 方法返回类型/值

c# - 带模板的 Asp.Net MVC EditorFor Array

javascript - 显示 JSON 返回的错误消息

javascript - 如何使用 SignalR 从服务器传递数组并使用 Knockout 呈现结果

c# - 具有动态参数的 Asp.net mvc Action

asp.net-mvc - 如何在 mvc 中的 Homecontroller 内根据条件更改提交按钮文本?

c# - MVC3 中上传文件时遇到问题

javascript - ASP.NET MVC Razor <text> 标签不接受小于或等于运算符