我目前正在建设,与我的应用程序允许用户点击一个按钮的触发一系列触发我一把umbraco网站的内容更新的Web服务请求的后台连接一个的WebAPI服务。
我的WebAPI服务类是设置为这样:
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.";
}
}
.....
}
我的WebAPI方法是通过使用AngularJS和HTML的调用。 当用户点击相关的网络API方法的按钮,该方法被运行,那么一条消息被返回到在该方法的成功或失败的用户。
所以,如果我是运行的getCountries使用相应的按钮将屏幕说:“国家成功更新”在成功上显示的消息()方法或代替它会输出都在抓定义返回的消息之一。
我的主要问题是GetAllUpdates()方法运行的所有其他方法一前一后。 这是很好,我在成功时说:“所有更新的内容”,然而设置真的分崩离析,当一个例外的另一种方法是打回的消息。 例如,的getCountries()首先运行。 如果有异常这里提出,没有消息被返回到屏幕上的应用程序简单地移动到下一个方法GetAreas()。 这种传播贯穿始终,然后在显示成功消息给用户一个假象,更新进展顺利。
因此,我的问题是,我该如何停止GetAllUpdates()方法如果出现异常,而不修改我的其他方法回报链运行后续方法? 该方法需要返回,这样当他们在自己的但是,当作为GetAllUpdates的一部分,跑了()返回的catch块的错误消息,如同该方法是完全成功的正在接受治疗的运行屏幕上显示的消息的字符串而用户没有明智的。
任何帮助将不胜感激。
NB遵循以下我改变了我的WebAPI方法做如下的答复之一后:
NEW CLASS
public class ResponseMessage
{
public bool Result { get; set; }
public string Message { get; set; }
}
回报方法
ResponseMessage response = new ResponseMessage();
String json = string.Empty;
response.Result = true;
response.Message = "Content update successful";
json = JsonConvert.SerializeObject(response);
return json;
我的角代码如下:
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");
}
};
})