提供来自不同目录的Web文件 - 错误400错误请求

时间:2015-10-14 15:25:31

标签: angularjs asp.net-mvc

我有一个使用AngularJS的MVC应用程序。我正在组织文件夹结构为基于特征而不是基于类型。

现在是一个示例文件夹结构

  • App(主项目中的文件夹,与视图处于同一级别)
    • 资产
      • CSS
      • JS​​
      • 主页
        • home.js
        • home.tests.js
        • home.html的
      • 关于(等)

现在的问题是当ui-router尝试加载home.html时,Web服务器会抛出400错误。如果我在浏览器中手动转到该文件,它可以工作。这里有什么问题?为什么我不能从这个目录中提供文件。请注意,我实际上右键单击控制台中的400消息,然后在新选项卡中选择打开。所以我知道我正在查看的文件是AngularJS要求的URL

这是我的ui-router设置

.state('home', {
    url: '/home',
    templateUrl: '/app/pages/home/home.html',
    controller: 'mainPageController'
})

注意: 我从同一个目录中提供一个.js文件似乎工作正常!

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题,这是由另一个尝试修复IE缓存错误的开发人员引起的。

我在Ben Cull找到了解决方案:https://stackoverflow.com/a/30014936/710268

//initialize get if not there
if (!$httpProvider.defaults.headers.get) {
    $httpProvider.defaults.headers.get = {};
}

//disable IE ajax request caching
$httpProvider.defaults.headers.get["If-Modified-Since"] = "Fri, 01 Jan 2010 00:00:00 GMT";

我的问题是“If-Modified-Since”标头设置为“0”,并且由于某种原因导致html模板文件无法加载。

答案 1 :(得分:0)

默认情况下,路由器将从MVC项目的顶层开始(即您的Views和App文件夹所在的位置),而不是您的JavaScript所在的文件夹。

因此,在Angular中,您的templateUrl需要是App / Pages / Home / home.html。

所以在你的角度路由器配置中有属性:

templateUrl: 'App/Pages/Home/home.html'