我应该如何使用一个index.cshtml页面处理SPA的MVC和Web API路由?

时间:2014-04-25 03:54:08

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-mvc-routing

我有一个单页面应用程序,它有一个MVC文件index.cshtml 由Home控制器和Index方法提供服务。所有登录,注销 和数据请求由WebAPI提供。有人可以确认我是否正在安装 我的路由正确。这就是我所拥有的:

RouteConfig.cs

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

        routes.MapRoute("DefaultRedirect",
            "",
            new { controller = "Home", action = "Index" }
        );

        routes.MapRoute(
            "catchall",
            url: "{*url}",
            defaults: new { controller = "Home", action = "Index" });

    }

WebApiConfig.cs

    public static void Register(HttpConfiguration config)
    {

        config.Routes.MapHttpRoute(
            name: ApiControllerOnly,
            routeTemplate: "api/{controller}"
            );

        config.Routes.MapHttpRoute(
            name: ApiControllerAndId,
            routeTemplate: "api/{controller}/{id}",
            defaults: null, //defaults: new { id = RouteParameter.Optional } //,
            constraints: new { id = @"^\d+$" } // id must be all digits
            );

        config.Routes.MapHttpRoute(
            name: ApiControllerAction,
            routeTemplate: "api/{controller}/{action}"
            );

        config.Routes.MapHttpRoute(
            name: ApiControllerActionAndId,
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: null, //defaults: new { id = RouteParameter.Optional } //,
            constraints: new { id = @"^\d+$" }
            );

    }

Global.asax中

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        WebApiConfig.CustomizeConfig(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);

我不确定是第一个处理MVC路由的文件。我需要吗? 只有一条路线可以让所有东西都进入Home Controller和Index方法。

我是否应该在MVC路由中忽略那些以api开头的请求?

1 个答案:

答案 0 :(得分:2)

您不应该将SPA页面作为index.cshtml提供服务(因为这意味着它将被编译到服务器上将为响应提供服务的相应类)

它应该作为index.html提供,并且它需要的所有数据都应该通过AJAX调用来获取服务器。