【问题标题】:C# Web API routing mixed with Angular routingC# Web API 路由与 Angular 路由混合
【发布时间】:2014-08-15 01:31:24
【问题描述】:

是否可以让 MVC 应用程序仅使用来自 WEB API 的路由,然后允许 Angular 使用它的 routeprovider 来完成其余的路由?当我运行我的应用程序时,我得到:

GET http://localhost:8080/Views/Home/Index.html 404 (Not Found) 

MVC 路由RouteConfig.Cs

 // serves plain html
        routes.MapRoute(
             name: "DefaultViews",
             url: "view/{controller}/{action}/{id}",
             defaults: new { id = UrlParameter.Optional }
        );

        // Home Index page have ng-app
        routes.MapRoute(
            name: "AngularApp",
            url: "{*.}",
            defaults: new { controller = "Home", action = "Index" }
        );

WebAPIConfig.cs

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

C# 控制器(尝试多种事情)

public ActionResult Index()
{
    ViewBag.Title = "Home Page";

    return View();
}

public ActionResult Test()
{
    var result = new FilePathResult("~/Views/Home/test.html", "text/html");
    return result;
}

public ActionResult Show()
{
    ViewBag.Title = "HomePage";

    return View();
}

角度路由:

   app.config(function ($routeProvider, $locationProvider) {
    $locationProvider.html5Mode(true);
    $routeProvider
        .when("/Tests", { templateUrl: "Views/Home/test.html", controller: "homeCtrl" })
        .when("/Shows", { templateUrl: "/Home/Show.cshtml", controller: "homeCtrl" })
        .otherwise({ redirectTo: "/" });
});

文件结构图供参考:

编辑: GitHub 工作示例: https://github.com/allencoded/CSharpAngularRouting

【问题讨论】:

    标签: c# asp.net-mvc angularjs


    【解决方案1】:

    您应该使用 MVC 4/5 为您的 Angular 应用程序生成所有视图。您的主页可以初始化 Angular 应用程序,然后在您的路线中,您可以将 mvc url 用于您的视图,并将布局设置为 null。

    编辑:

    创建 Web Api 项目在 RouteConfig.cs 中添加这个

    // serves plane html
    routes.MapRoute(
         name: "DefaultViews",
         url: "view/{controller}/{action}/{id}",
         defaults: new { id = UrlParameter.Optional }
    );
    
    // Home Index page have ng-app
    routes.MapRoute(
        name: "AngularApp",
        url: "{*.}",
        defaults: new { controller = "Home", action = "Index" }
    );
    

    _ViewStart.cshtml

    @{
        Layout = null;
     }
    

    HomeController 索引操作页面将是您的 Angular 主页,所有其他页面都可以是您的 Angular 部分视图。

    编辑:

    您的 Angular 模板 url 错误。当 Angular 尝试加载模板时,mvc 将返回主页模板(具有 ng-app),因此它将再次初始化,您只能初始化 ng-app 一次。

    将您的模板网址更改为/view/{controller/{action}

     .when("/Tests", { templateUrl: "view/Home/test", controller: "homeCtrl" })
    

    【讨论】:

    • 所以你是说指向 C# 路由的 $routeprovider templateUrls?你有例子吗?
    • 我对我的问题进行了编辑,我上面的代码看起来像这样。当我尝试去那些路线时,它们似乎陷入了无限循环或者它会杀死浏览器。
    • 啊,我知道我试过你上面的方法它从来没有用过,但我在做 Views/Home/test....当我把它改成“view/Home/test”它工作提供了我的测试是一个 test.cshtml
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2015-03-20
    • 2014-09-15
    相关资源
    最近更新 更多