Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从mvc.net获取用于AngularJS http的URL的可靠方法是什么?_Javascript_Asp.net Mvc_Json_Angularjs - Fatal编程技术网

Javascript 从mvc.net获取用于AngularJS http的URL的可靠方法是什么?

Javascript 从mvc.net获取用于AngularJS http的URL的可靠方法是什么?,javascript,asp.net-mvc,json,angularjs,Javascript,Asp.net Mvc,Json,Angularjs,在中使用http时,必须在JavaScript中指定url。我不想硬编码完整的url(例如),因为这意味着实时和测试环境之间的代码更改 我读过一些只使用相对路径的示例(例如/Contoller/GetDetails),但是由于MVC路由的工作方式,这通常无法工作。作为一个简单的示例,可以通过以下方式访问主页: 因此,添加相对路径并不理想,因为三分之二的路由将获得错误的http url 我最初认为我可以通过JavaScript确定基本url并使用: window.location.proto

在中使用http时,必须在JavaScript中指定url。我不想硬编码完整的url(例如),因为这意味着实时和测试环境之间的代码更改

我读过一些只使用相对路径的示例(例如/Contoller/GetDetails),但是由于MVC路由的工作方式,这通常无法工作。作为一个简单的示例,可以通过以下方式访问主页:

  • 因此,添加相对路径并不理想,因为三分之二的路由将获得错误的http url

    我最初认为我可以通过JavaScript确定基本url并使用:

    window.location.protocol+"//"+window.location.host + "/Contoller/GetDetails"
    
    但我发现,如果MVC应用程序在文件夹中运行,并且无法正确解析url,则此操作将失败,如:

    我还考虑使用一种更为RESTful的方法,并将JavaScript所需的所有URL作为json数据的一部分进行处理——但当然,这会导致一种鸡毛蒜皮的情况:如果json中提供了http URL,如何让第一个json调用起作用


    在AngularJS对mvc.net的http调用中,获取URL的可靠方法是什么

    一种方法似乎是使用.net代码在布局页面中设置JavaScript变量,如下所示:

    这允许您使用applicationBaseUrl调用http

     $http({
                    method: 'GET', url: window.applicationBaseUrl + '/Controller/GetDetails'
                })
    

    如果您正在使用angular-您需要查看窗口服务-位置服务-。使用这些工具可以轻松解决相对路径问题。
    此外,你称之为MVC应用文件夹的是应用上下文

    很好,除了您应该使用角度常量替换window.applicationBaseUrl以实现依赖注入和可测试性:
    yourApp.constant('applicationBaseUrl',@Html.Raw(HttpUtility.JavaScriptStringEncode(Url.Content(~/),true))
    
     $http({
                    method: 'GET', url: window.applicationBaseUrl + '/Controller/GetDetails'
                })