ASP.NET MVC 结合 Web API 路由

10

我正在尝试为Web页面和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错误,除非我先注册Web API路由,否则ASP.NET MVC路由不起作用,而Web API路由可以运作。

我和你一样做了(先处理 WebAPI),在这里可以工作。你有对路由做其他操作吗? - Christoph Fink
我需要两个路由都能工作,但只有第一个注册的路由能够工作。 - user2412672
是的,我明白了 - 这对我很有效,所以我想知道你是否还有其他未展示的路由处理方式? - Christoph Fink
不,只是我展示的东西。 - user2412672
1个回答

11

像@ChrFin在评论中提到的那样,如果你首先注册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路由。


谢谢,老兄,你救了我! - Steve Sheldon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接