asp.net-mvc - ASP.NET MVC 和 AngularJS 路由

标签 asp.net-mvc angularjs asp.net-mvc-routing angularjs-routing

我在 ASP.NET MVC 应用程序中使用 AngularJS,但我遇到了嵌套路由问题。我正在使用 ASP.NET MVC 路由,但在 SPA 内部我正在使用 UI-Router。

我的Home/Index是我的 AngularJS 应用程序和 <div ui-view>在Index.cshtml中

我希望我的 URL 完全由我的 AngularJS SPA 控制(html5Mode=true)。

我在 ASP.NET MVC 中设置了 RouteConfig,如下所示:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

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

我正在使用 UI-Router,但这无关紧要,因为这是 ASP.NET MVC 路由问题。然而 AngularJS 路由代码如下:

app.config(function ($stateProvider, $urlRouterProvider, $locationProvider) {

    $urlRouterProvider.otherwise("/");

    $stateProvider
    .state('home', {
      url: "/",
      templateUrl: "Scripts/app/partials/home.html",
      controller: "HomeController"
    })
    .state('login', {
      url: "/login",
      templateUrl: "Scripts/app/partials/login.html",
      controller: "AccountController"
    })
    .state('login.list', {
      url: "/list",
      templateUrl: "Scripts/app/partials/login.list.html",
      controller: "AccountController"
    });

    $locationProvider.html5Mode(true);

});

当我访问 / 时,效果非常好或/login ,但是当我转到/login/list时我从 ASP.NET MVC 应用程序中收到 404 错误消息:

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

有什么问题吗?我已经指定了{.*}规则,因此应将其定向到 AngularJS 应用程序。

最佳答案

“这是一个 SPA,其中路由由 AngularJS UI-Router 控制” - 在应用程序实际加载之前,情况并非如此。

您需要使应用程序可以通过所有可能的途径使用。

我通常做的是在服务器上有这样的结构:

  • assets/* -> 忽略路由(将思想传递给文件)
  • api/* -> Api 路由
  • * ->index.html/index.cshtml/???

这是我常用的一组路由的示例。

router
.Route("assets/{*ignore}").Through()
.Route("api/search").To<SearchController>()
.Route("api/content/{contentType}/{id}").To<ContentController>(x => x.Set.Defaults(new {id = RouteParameter.Optional}))
.Route("api/file/{contentType}/{id}/{head}").To<FileController>(x => x.Set.Defaults(new {id = RouteParameter.Optional, head = RouteParameter.Optional}))
.Default().To<TController>();

(请注意,它们是在围绕 WebAPI 框架的框架中定义的,因此具有流畅的语法和强类型 Controller 目标)

如果您使用 Razor 作为主视图,我通常会这样做:

<base href="@string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~/"))" /> 

设置基本路径。

关于asp.net-mvc - ASP.NET MVC 和 AngularJS 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084997/

相关文章:

c# - 通过加载 MVC 复选框,选中以禁用文本框

android - 如何在移动网络应用程序上使用 mailto

asp.net-mvc - 当 URL 中不存在可选参数时找不到 Web API 操作

asp.net-mvc-3 - Url.Action MVC3 在构建链接时无法识别路由参数

angularjs - ionic 应用程序无法使用 $http 连接启用了 cors 的服务器

c# - ASP.NET MVC 路由,Html.BeginForm

c# - 使用 Dynamic Linq 和 EPPlus 导出到 Excel?

jquery - 将 FullCalendar 日期传递到我的对话框模态表单

asp.net-mvc - 我可以在不依赖客户从 PayPal 单击 "Return to site"的情况下从 PayPal Standard 获得订单确认吗?

javascript - 范围错误: Maximum call stack size exceeded - Google Maps Api