2016-03-30 6 views
0

Ich hoffe, Sie können mir helfen. Ich möchte meine Haare ausziehen!AngularJS API Anruf mit ID als Parameter und C# Contoller

Ich versuche, einen API-Aufruf mit einer ID als übergebenen Parameter, um einen bestimmten Datensatz zu finden.

Etwas wie folgt aus: $http.get("/api/vendor/ReadVendor/" + vendorId)

Was passieren muss:

Wenn ich einen Anbieter der Aufruf an die API wählen wird mit dem einzigartigen Vendor-ID hergestellt. Dies wird an den Controller, DTO und DB übergeben und gibt die angegebenen Daten zurück.

Ich erhalte eine Fehlermeldung:

404/Nicht gefunden { "message": "Nein HTTP-Ressource wurde gefunden, dass der Anforderungs-URI übereinstimmt 'http://localhost:60090/api/vendor/ReadVendor/5'.", "MessageDetail": "Keine Aktion gefunden wurde auf dem Controller 'Vendor', der der Anfrage entspricht. "}

Mein Stack Strömung ist so etwas wie folgt aus:

  1. adminVendorNumber.html
  2. adminVendorNumber.controller.js
  3. VendorController.cs
  4. VendorDTO.cs

Dies ist Teil meiner adminVendorNumber.html für den Aufruf der AngularJS Funktion:

     <label>Vendor</label> 
         <div class="input-dropdown"> 
          <cc-dropdown cc-placeholder="Select Vendor" 
             ng-model="NewVendorNumber.Vendor" 
             ng-disabled="false" 
             ng-options="vendorData" 
             cc-fields="VendorId" 
             cc-key-field="VendorId" 
             cc-allow-search="false" 
             ng-required="false" 
             ng-change="vendorSelected()" 
             name="iVendor"> 
          </cc-dropdown> 
         </div> 
        </div> 

Das ist mein AngularJS Controller (ein Teil davon mit meiner spezifischen Funktion):

(function() { 
    "use strict"; 

    angular 
     .module('app.adminVendorNumber') 
     .controller('adminVendorNumberController', adminVendorNumberController); 

    adminVendorNumberController.$inject = ['$http', 'logger', '$scope']; 

    function adminVendorNumberController($http, logger, $scope) { 
     var vm = $scope; 
     vm.formSubmmision = true; 

     vm.vendorItemData = null; 
     vm.itemGroupData = null; 
     vm.vendorData = null; 

     vm.vendorSelected = vendorSelected; 

     vm.save = save; 

     activate(); 

     function activate() { 
      return vendorItemData().then(getAllItemGroups).then(getVendorData).then(function() { 
       logger.info('Activated Vendor Number Creation'); 
      }); 
     } 


     function vendorSelected() { 

      vm.formSubmmision = true; 
      return getVendorById(vm.NewVendorNumber.Vendor.VendorId); 
     } 

     function getVendorById(vendorId) { 
      return $http.get("/api/vendor/ReadVendor/" + vendorId) 
       .then(Success) 
       .catch(Failure); 

      function Success(responce) { 
       vm.vendorSelected = responce.data.Records; 
       return vm.vendorSelected; 
      } 

      function Failure(error) { 
       logger.error('Failed to get Vendor Data ' + error.data.Message); 
      } 
     } 

    }; 
} 
)(); 

Hier ist ein Teil meiner VendorController.cs Funktion, die aufgerufen wird:

public class VendorController : ApiController 
    { 
     private VendorDTO dto = new VendorDTO(); 

     public HttpResponseMessage ReadVendor(int vendorId) 
     { 
      try 
      { 
       CommandResult<Vendor> result = dto.ReadVendor(vendorId); 
       return Request.CreateResponse((result.Status == CommandStatus.Success ? HttpStatusCode.OK : HttpStatusCode.InternalServerError), result); 
      } 
      catch (IOWAException ex) 
      { 
       return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message); 
      } 
     } 

    } 
} 

Hier ist der nächste Schritt, wo die VedorDTO.cs heißt:

public class VendorDTO 
{ 

    public CommandResult<Vendor> ReadVendor(int vendorId) 
    { 
     return readVendor(vendorId); 
    } 

    private CommandResult<Vendor> readVendor(int vendorId) 
    { 
     CommandResult<Vendor> result = null; 

     try 
     { 
      VendorContext dalVendor = new VendorContext(); 
      result = dalVendor.Read(vendorId); 
     } 
     catch (IOWAException ex) 
     { 
      result = new CommandResult<Vendor>(ex, "Error reading Vendors"); 
     } 

     return result; 
    } 

Antwort

2

Geben Sie [HttpGet] -Attribut auf die Aktion, wie unten erwähnt:

[HttpGet] 
public HttpResponseMessage ReadVendor(int vendorId) 
+0

Vielen Dank! Sehr einfacher Fehler: D – onmyway

1

Sie bitte Ihre Methodennamen mit GetReadVendor

ODER

ändern

Fügen Sie HttpGet über Ihrer Methode wie folgt hinzu:

[HttpGet] 
public HttpResponseMessage ReadVendor(int vendorId) 
1
[HttpGet] 
public CommandResult<Vendor> ReadVendor(int vendorId) 
{ 
    return readVendor(vendorId); 
} 

und noch etwas Probieren Sie dies für Ihre get statment

  $http.get('Your URL/?vendorId='+your val) 
+0

Danke für die Antwort und Hilfe! Wie folgt: $ http.get ("/ api/vendor/ReadVendor /? Vendorid =" + vendorId) – onmyway

0

Es scheint einige Probleme mit der API-Controller haben. Sie müssen die HTTP-Methoden und Routen im Controller definieren, damit es funktioniert. Außerdem müssen Sie die vendorId in id ändern.

[RoutePrefix("api/vendor")] 
public class VendorController : ApiController 
{ 
    [Route("ReadVendor"), HttpGet] 
    public HttpResponseMessage ReadVendor(int? id) 
    { 
     return Request.CreateResponse(HttpStatusCode.OK, ""); 
    } 
    //Rest of your code 
} 
+0

Vielen Dank für Ihre großartige Antwort. Dies ist offensichtlich ein Kodiermuster oder eine Technik? Wo kann ich mehr darüber erfahren? Ist das auch eine ältere Codiertechnik oder neuer? – onmyway

Verwandte Themen