Zurückgeben einer Fehlermeldung, die auf einen Endbenutzer auf die Ausnahme in der WebApi Methoden

Ich bin derzeit am Aufbau einer WebApi-service, der verbindet sich mit dem backoffice von meiner Anwendung, so dass der Benutzer auf eine Schaltfläche löst eine Reihe von web-service-Anfragen auslösen, dass meine Umbraco-website mit aktualisierten Inhalten.

Die Klasse für meinen WebApi service-setup als so:

public class MyController : UmbracoApiController{
     //Global variable declarations go here

     private MyController(){
          //assign actual values to global variables here
     }

     public string GetAllUpdates(){
          try{
              GetCountries();
              GetAreas();
              GetCities();
              ...
          }
          catch (TimeoutException ex)
          {
               Log.Error("Web Service Timeout", ex);
               return "Failed to contact web services.";
          }
          catch (Exception ex)
          {
               Log.Error("Exception", ex);
               return "An error has occurred.";
          }
     }

     public string GetCountries(){
         try{
               //Main code here
         }
         catch(TimeoutException ex){
           Log.Error("Web Service Timeout", ex);
           return "Failed to contact web services.";
         }
         catch(Exception ex){
           Log.Error("Exception", ex);
           return "An error has occurred.";
         }
     }

     .....
}

Meinen WebApi-Methode aufgerufen werden, die durch die Verwendung von AngularJS und HTML. Wenn ein Benutzer auf die Schaltfläche klickt, bezogen auf eine Web-Api-Methode, die Methode ausgeführt wird, dann erfolgt eine Rückmeldung an den Nutzer über den Erfolg oder Misserfolg der Methode.

So, wenn ich zu laufen waren die GetCountries () - Methode über den entsprechenden button eine Nachricht würde auf dem Bildschirm angezeigt werden, die sagen "Ländern erfolgreich aktualisiert" bei Erfolg oder stattdessen wäre es die Ausgabe eine der Nachrichten, die zurückgegeben werden, in den catch-Definitionen.

Mein Hauptproblem ist, dass die GetAllUpdates () - Methode wird ausgeführt, alle anderen Methoden, eine nach der anderen. Das ist in Ordnung und ich wieder eine Nachricht bei Erfolg den Worten "Alle Inhalte aktualisiert", jedoch ist die Einrichtung wirklich auseinander fällt, wenn eine Ausnahme ist der hit in eine der anderen Methoden. Zum Beispiel, GetCountries() wird zuerst ausgeführt. Wenn eine Ausnahme ausgelöst wird, hier wird keine Meldung auf dem Bildschirm zurückgegeben und die Anwendung bewegt sich einfach auf die nächste Methode GetAreas(). Dieser breitet sich durch bis zum Ende, wo der Erfolg Nachricht wird dann angezeigt, dass der Benutzer den falschen Eindruck, dass das update gut gelaufen.

Meine Frage ist daher wie kann ich das anhalten der GetAllUpdates () - Methode ausgeführt nachfolgenden Methoden in der Kette, wenn eine Ausnahme Auftritt, ohne änderungen zurück in meine anderen Methoden? Die Methoden müssen einen string zurückgeben, so dass die Nachricht auf dem Bildschirm angezeigt wird, wenn Sie auf Ihre eigenen laufen jedoch, wenn lief als Teil von GetAllUpdates() die Fehlermeldungen werden zurückgegeben, der den catch-Blöcken behandelt werden, als wenn die Methode wurde erfolgreich abgeschlossen und der Benutzer wird nicht klüger.

Jegliche Hilfe würde sehr geschätzt werden.

N. B. Nachdem Sie eine der unten aufgeführten Antworten ich veränderte meine WebApi Methode, um Folgendes zu tun:

NEUE KLASSE

public class ResponseMessage
    {
        public bool Result { get; set; }
        public string Message { get; set; }
    }

RETURN-ON-METHODEN

            ResponseMessage response = new ResponseMessage();
            String json = string.Empty;

            response.Result = true;
            response.Message = "Content update successful";

            json = JsonConvert.SerializeObject(response);
            return json;

Mein Winkel-code ist wie folgt:

 angular.module("umbraco")
.controller("AxumTailorMade",
function ($scope, $http, AxumTailorMade) {
    $scope.getAll = function() {
        $scope.load = true;
        $scope.info = "Retreiving updates";
        AxumTailorMade.getAll().success(function (data) {
            var response = JSON.parse(data);
            $scope.result = response.Result;
            $scope.info = response.Message;
            $scope.load = false;
        });
    };

  });

angular.module("umbraco.services").factory("AxumTailorMade", function ($http) {
    return {
        getAll: function () {
            return $http.get("/umbraco/api/axumtailormade/getallupdates");
        },
        getRegions: function () {
            return $http.get("/umbraco/api/axumtailormade/getregions");
        },
        getCountries: function () {
            return $http.get("/umbraco/api/axumtailormade/getcountries");
        },
        getAreas: function () {
            return $http.get("/umbraco/api/axumtailormade/getareas");
        },
        getCities: function () {
            return $http.get("/umbraco/api/axumtailormade/getcities");
        },
        getCategories: function () {
            return $http.get("/umbraco/api/axumtailormade/getcategories");
        },
        getPackages: function () {
            return $http.get("/umbraco/api/axumtailormade/getpackages");
        },
        getHotels: function () {
            return $http.get("/umbraco/api/axumtailormade/gethotels");
        },
        getActivities: function () {
            return $http.get("/umbraco/api/axumtailormade/getactivities");
        }
    };
})
  • Sie werfen sollten Fehler oder Fehler erlauben, sich von Ihrem service-Aufruf. Schlucken Sie nicht den Fehler und ein Ergebnis zurückgeben. Wenn ein Fehler ausgelöst wird, das Versprechen abgelehnt, und Antwort.Daten enthält die Ausnahme
  • Ausnahmen sind nicht end-user lesbar sind und nicht zurückgegeben werden soll, in einer solchen Weise. Auch, werfen Fehler und es Ihnen ermöglicht, sich in diesem Fall würde das bedeuten, dass der Fehler ausgelöst werden den ganzen Weg bis zu den privaten Instanziierung Methode der Klasse, die nicht für alle Nachrichten werden wieder in den end-Benutzer verlassen Sie mit keine Rückmeldung
InformationsquelleAutor jezzipin | 2015-02-03
Schreibe einen Kommentar