【问题标题】:ASP.NET 5 Routing with AngularJS Routing带有 AngularJS 路由的 ASP.NET 5 路由
【发布时间】:2015-11-11 06:07:41
【问题描述】:

我正在使用带有 AngularJS 的 ASP.NET 5 开发应用程序。我正在使用 Angular 提供的基本客户端 HTML 路由支持。我已经成功实现了Angular Routing,Startup类中的默认路由是

app.UseMvc(routes => 
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });

这是我的 Angular 路由

app.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
$routeProvider.
    when('/', {
        templateUrl: 'static/home.html',
        controller: 'AppController'
    }).
    when('/about', {
        templateUrl: 'static/about.html',
        controller: 'AppController'
    }).
    when('/contact', {
        templateUrl: 'static/contact.html',
        controller: 'AppController'
    }).
    when('/tutorial', {
        templateUrl: 'static/tutorial.html',
        controller: 'AppController'
    }).
    otherwise({
        redirectTo: '/'
    });

    $locationProvider.html5Mode(true);
 }]);

一切正常,但是当我在同一个控制器中创建另一个操作并希望通过 URL 重定向到该操作时,它会将其重定向到相同的操作,即索引

这是我的 HomeController 代码

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    public IActionResult Web()
    {
        return View();
    }
}

路由发生在索引中,但无法导航到 Web 操作。我面临的问题是什么。谢谢。

【问题讨论】:

    标签: javascript asp.net angularjs asp.net-mvc


    【解决方案1】:

    我认为问题在于您的应用程序对您的Web 方法一无所知。要解决这个问题,您可以:

    1) 使用属性路由,并且

    2) 在你的路由配置方法中写直接路由。

    同时检查您的 web.config 文件是否在 system.webServer 部分的 rewrite 节点或任何其他重定向配置中进行重定向

    附:请注意,如果您重定向到另一个页面,您的 Angular 应用程序将重新配置并重新启动。这需要一些时间。如果您希望您的应用程序真的很酷,则不应使用重定向和所有其他页面重新加载方法。尝试以“角度”的方式思考。如果您想更改部分主要内容 - 角度将通过路由来完成。如果你想加载一些额外的内容并且你希望它在浏览器中看起来像 http://host/controller/method/submethod1/submethod2 url - Angular 也可以为你做。作为第一步,您只需将get() 方法放在角度控制器中。在这种情况下,当 Angular 将解析此控制器时,它会调用您的 get() 方法并从服务器加载数据。因此,您将始终快速应用实际内容。

    附言尝试使用angular-ui-routing 而不是默认的ng-routeng-route 不错,但不能很好地支持子路由,还有一些其他的问题。 angular-ui-routing 解决了所有这些乱七八糟的事情

    【讨论】:

    • 我用过 Angular UI Routing,效果很好。但是我丢失了 AngularJS 的漂亮 URL。我必须使 web.config 在我的项目中可用,以便在刷新时路由到默认的 home.html。有什么解决办法吗?
    • 角度路由引擎的主要思想是它的客户端路由,而不是服务器端。如果您使用默认 ngRoute,您会遇到 ngRoute 问题列表中的问题之一 - 它总是对服务器进行 url 调用,因此您需要在 web 配置中使用重写规则来禁用它。这也是我建议你使用 angular-ui-route 插件的原因。在这种情况下,无需禁用服务器端路由,您可以从 mvc 控制器访问所有服务器方法。我也将 angularjs 与 asp.net mvc 一起使用,我现在遇到了和你一样的问题:)
    • 顺便说一句,如果您希望在使用角度路由系统时您的网址看起来像 http://host/sitename/path1/path2 而不是 http://host/sitename/#/path1/path2,您可以在您的角度的应用程序配置方法中启用 html5Mode 设置它模块:$locationProvider.html5Mode(true);。当然不要忘记在配置函数中注入$locationProvider。但是,结果是一样的:ngRoute 在将它与 mvc 应用程序一起使用的情况下非常糟糕。相信我 :) 我不会在这里宣传ui-router
    • 实际上,我遇到了问题,即我已经使用路由属性成功地解决了漂亮的 URL 和 Home/Web 服务器端路由。但是我不能通过 ActionLink 去另一个动作?而是将其重定向到 /home html 页面?有什么解决办法吗?谢谢
    • 如果我是对的,您的web.config 文件中有重定向规则。如果是这样,您将无法正确重定向到任何 url,因为您的重定向规则有效,并且它始终会将您重定向到您的重定向 url。在这种情况下,路由 cpnfiguration 不起作用 - 来自 web.config 的重定向规则具有最高优先级。如果您希望能够与其他服务器端交互,则不应使用任何重定向规则
    【解决方案2】:

    试试这个来注册你的路线,

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

    【讨论】:

      【解决方案3】:

      试试这个:

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

      然后在你的配置下面试试这个:

         .controller('RootController', ['$rootScope', '$scope', '$route', '$routeParams', '$location', '$http',
          function ($rootScope, $scope, $route, $routeParams, $location, $http) {
      
              $scope.$on('$routeChangeSuccess', function (e, current, previous) {
                  $scope.activeViewPath = $location.path();
              });
      
          }]);
      

      希望这会有所帮助。 =)

      【讨论】:

      • 我猜您不需要在 Home Controller 中添加其他操作。您使用的是哪种 Angular 路由? ng-route 还是 ui-router?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 2016-02-12
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多