如何使用angularjs在c#中调用API

如何使用angularjs在c#中调用API,c#,angularjs,ajax,razor,asp.net-web-api2,C#,Angularjs,Ajax,Razor,Asp.net Web Api2,嗨,我正在使用下面的代码调用我的API $http.get('/api/controller/method?param=value'). then(function (response) { if (response.status == 200) { console.log(response.data); } }); 它在我的本地机器上工作正常()

嗨,我正在使用下面的代码调用我的API

  $http.get('/api/controller/method?param=value').
           then(function (response) {
               if (response.status == 200) {
                   console.log(response.data);
               }
           });
它在我的本地机器上工作正常()

但当我使用应用程序名app将其部署到服务器时,它无法调用API()

显然,它不会,因为URL是不同的那么,在c中调用API的正确方法是什么?这样它就可以在任何服务器上工作了

我的尝试:
1. URL.Action:在这种情况下不起作用。
2.我不想使用@HTML.hidden

3.调用以斜杠(/)开头或不以斜杠(/)开头。

我不确定是否正确理解了您的问题,但我使用角度常数来设置服务器url

angular.constant("CONSTS", {
    "DEV_URL": "http://localhost:12345",
    "LIVE_URL": "http://server-ip/app"
})
然后在$http调用中

$http.get(CONSTS.DEV_URL + '/api/controller/method?param=value').
    then(function (response) {
        if (response.status == 200) {
            console.log(response.data);
        }
});
我确信有一种方法可以实现自动化(吞咽、咕噜),但我还没有实现。 部署应用程序时,我只需手动更改常量。 如果我能找到一个合适的方法,我会更新答案


希望这有点帮助…

我不知道您的构建过程等。但通常您可以将应用程序路径存储在角度中的某个常量值中,并在调用API作为前缀时使用它


如果您有某种类型的自动构建,那么很容易准备具有更改值的部署包(通过使用Gulp/Grunt/TeamCity/Octopus,无论您喜欢什么)

我通常通过使用
工厂来解决这个问题,就像这样-

function(angular){
    var module = angular.module('NameOfMyModule');  //gt the module
    module.factory('BaseUrl', function(){
         return '@Url.Action("Action", "Controller")';
    });
}(window.angular);
首先在.cshtml页面中,我加载了所有需要的angular js。 然后为baseURL创建一个工厂,如下所示-

function(angular){
    var module = angular.module('NameOfMyModule');  //gt the module
    module.factory('BaseUrl', function(){
         return '@Url.Action("Action", "Controller")';
    });
}(window.angular);
然后将
BaseURL
注入控制器中-

....
module.controller('SomeController', [...., 'BaseUrl', function(...., BaseUrl){
     $scope.baseUrl = BaseUrl;

}]);

....`
最后在url中添加它

$http.get($scope.baseUrl + /...../).then(....);
//控制器
app.controller(“sampleController”,函数($scope,commonService){
//职位
$scope.postData=函数(){
var命令={}
commonService.postSample(命令);
}
//得到
commonService.getSample().then(函数(数据){
$scope.permissionList=数据;
});
});
//服务
app.service('commonService',函数($http,$q){
this.postSample=函数(命令){
var deferred=$q.deferred();
$http({
方法:“POST”,
数据:命令,
url:“/Attention/CreatePersonDailyLeave”
})
.成功(功能(数据){
延迟。解析(数据);
})
.错误(函数(数据){
延迟。拒绝(数据);
});
回报。承诺;
}
this.getSample=函数(id){
var deferred=$q.deferred();
$http({
方法:“GET”,
async:true,
url:'/Attention/GetRoles?id='+id
})
.成功(功能(数据){
延迟。解析(数据);
})
.错误(函数(数据){
延迟。拒绝(数据);
});
回报。承诺;
}

});
你会尝试这样做吗:(即用你的域名替换localhost)这是可行的…但是默认情况下angularJS像这样调用“”。.Api Url是关于Api路由的。如果你想调用像
服务器api/app
这样的api,你需要在webApi.config文件中更改api路由配置。你应该添加web.config转换,将你的主url从localhost更改为你的-server-address。你正确理解了我的问题。但我不认为,这是一个正确的方法。我会留下答案,希望有人会发布一个更好的,我也想知道更好的方法。。。