【问题标题】:ASP.NET MVC combined with Web API routingASP.NET MVC 结合 Web API 路由
【发布时间】:2014-09-15 20:40:55
【问题描述】:

我正在尝试为网页和 Web API 注册多个路由。这是我的配置:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Registration Courses SPA",
            url: "Registration/Courses",
            defaults: new {controller = "Registration", action = "Index"});

        routes.MapRoute(
            name: "Registration Instructors SPA",
            url: "Registration/Instructors",
            defaults: new { controller = "Registration", action = "Index" });

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

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate:"api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

这是我在 Global.asax 中注册它们的方法

RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);

问题是 Web API 路由不工作,我收到 404 错误,除非我先注册 WebAPI 路由,然后 ASP.NET MVC 路由不工作,Web API 路由工作。

【问题讨论】:

  • 我完全按照您的方式进行操作(首先是 WebAPI)并且它在这里工作。你还对路由做其他事情吗?
  • 我需要两条路线才能工作,但只有先注册才能工作
  • 是的,这很清楚 - 这对我有用,所以我想问您是否对尚未显示的路由进行了其他操作?
  • 不,只是我展示的内容

标签: c# asp.net asp.net-mvc asp.net-web-api routing


【解决方案1】:

就像@ChrFin 在他的 cmets 中所说,如果您首先注册 Web API 路由,您的 MVC 路由应该仍然有效,因为默认的 Web API 路由以“api”开头。

我遇到了同样的问题,但这是因为我们将默认 Web API 路由的 routeTemplate 更改为 {controller}/{id},因为我们希望它成为默认值,因为我们的应用程序的目的是成为其他应用程序的 api .在我们的 Global.asax 文件中,Web API 路由在 MVC 路由之前注册,这是任何新 Web API 应用程序的默认设置。因为“/anything”匹配默认的 Web API 路由,所以路由处理停止,所以我们的 MVC 路由永远没有机会被匹配。

关键是,如果路由匹配,路由处理就会停止——即使没有匹配的控制器。

为了解决我们的问题,我们为 MVC 路由添加了前缀“mvc”,并在 Web API 路由之前注册了 MVC 路由。

【讨论】:

  • 谢谢你救了我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2015-08-04
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
相关资源
最近更新 更多