2015-12-14 5 views
6

Hallo ich meine API nenne unter CodeWie API in C# nennen AngularJS mit

$http.get('/api/controller/method?param=value'). 
      then(function (response) { 
       if (response.status == 200) { 
        console.log(response.data); 
       } 
      }); 

Es ist in meinem lokalen Rechner Feinbearbeitung (http://localhost/api/controller/method?param=value).

Aber wenn ich es in Server mit Anwendungsnamen eingesetzt App, ist es nicht in der Lage, die API (http://server-ip/app/api/controller/method?param=value) zu nennen.

Offensichtlich wird es nicht, da URL anders sind. Also, was ist der richtige Weg, um eine API in C# aufzurufen, so dass es in jedem Server funktioniert.

Was ich versucht habe:
1. Url.Action: Es ist in diesem Fall nicht funktioniert.
2. Ich möchte nicht verwenden @ HTML.hidden
3. Rufen Sie starten mit oder ohne Schrägstrich (/)

+0

werden Sie dies versuchen: http: // Server-IP/API/Controller/Methode? Param = Wert (d. H. Ersetzen Sie localhost durch Ihren Domain-Namen) –

+0

das funktioniert ...aber standardmäßig angularJS ruft "http: // server-ip/app" wie folgt .. – user3035305

+0

Api Url dreht sich alles um Api Routing. Wenn Sie die API wie 'server-api/app' aufrufen möchten, müssen Sie die api route config in der Datei webApi.config ändern. –

Antwort

0

Ich bin mir nicht sicher, ob ich Ihre Frage richtig undestood, aber ich bin mit Winkel ständigen Server url

angular.constant("CONSTS", { 
    "DEV_URL": "http://localhost:12345", 
    "LIVE_URL": "http://server-ip/app" 
}) 

und dann in $ http Aufruf

$http.get(CONSTS.DEV_URL + '/api/controller/method?param=value'). 
    then(function (response) { 
     if (response.status == 200) { 
      console.log(response.data); 
     } 
}); 

ich bin sicher, es gibt einen Weg zu setzen diese (schluck, grunzen) zu automatisieren, aber ich didn‘ Ich bin noch nicht da. Bei der Bereitstellung der App würde ich nur manuell die Konstante ändern. Wenn ich herausfinden werde, dass ich den richtigen Weg finde, werde ich die Antwort aktualisieren.

hoffe, das hilft ein wenig ...

+0

Sie haben meine Frage richtig verstanden. Aber ich denke nicht, es ist ein richtiger Weg, es zu tun. – user3035305

+0

ich werde die antwort verlassen, hoffentlich wird jemand einen besseren post, ich würde gerne besser so auch wissen ... – vidriduch

0

Ich weiß nicht, Ihren Build-Prozess etc., aber in der Regel können Sie Anwendungspfad in einem gewissen konstanten Wert in Angular speichern und verwenden, wenn Ihre API als Präfix aufgerufen wird.

Wenn Sie einen automatisierten Build haben, ist es einfach, Bereitstellungspakete mit geänderten Werten vorzubereiten (mit Gulp/Grunt/TeamCity/Octopus, was immer Sie möchten).

1

Ich löse dies in der Regel durch eine factory wie dies mit -

Zuerst in der .cshtml Seite, die ich benötigt, um alle Winkel js laden. Dann eine Fabrik für die baseURL wie diese schaffen -

function(angular){ 
    var module = angular.module('NameOfMyModule'); //gt the module 
    module.factory('BaseUrl', function(){ 
     return '@Url.Action("Action", "Controller")'; 
    }); 
}(window.angular); 

injizieren Dann, dass BaseURL in der Steuerung -

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

}]); 

....` 

es schließlich in der URL prepend

$http.get($scope.baseUrl + /...../).then(....); 
0

//controller 
 
app.controller("sampleController", function($scope, commonService) { 
 

 
    //post 
 
    $scope.postData = function() { 
 
    var command = {} 
 
    commonService.postSample(command); 
 
    } 
 

 
    //get 
 
    commonService.getSample().then(function(data) { 
 
    $scope.permissionList = data; 
 
    }); 
 

 
}); 
 

 

 

 
//service 
 
app.service('commonService', function($http, $q) { 
 

 
    this.postSample = function(command) { 
 
    var deferred = $q.defer(); 
 
    $http({ 
 
     method: 'POST', 
 
     data: command, 
 
     url: '/Attendance/CreatePersonDailyLeave' 
 
     }) 
 
     .success(function(data) { 
 
     deferred.resolve(data); 
 
     }) 
 
     .error(function(data) { 
 
     deferred.reject(data); 
 
     }); 
 
    return deferred.promise; 
 
    } 
 

 

 
    this.getSample = function(id) { 
 
    var deferred = $q.defer(); 
 
    $http({ 
 
     method: 'GET', 
 
     async: true, 
 
     url: '/Attendance/GetRoles?id=' + id 
 
     }) 
 
     .success(function(data) { 
 
     deferred.resolve(data); 
 
     }) 
 
     .error(function(data) { 
 
     deferred.reject(data); 
 
     }); 
 
    return deferred.promise; 
 
    } 
 

 
});