2015-06-08 4 views
0

У меня есть веб-Апи, в котором у меня есть этот кодРеализовать OnFailure в контроллере WebAPI

    @{ 
        AjaxOptions addAjaxOpts = new AjaxOptions 
        { 
         // options will go here 
         OnSuccess = "getData", 
         OnFailure="selectView('add')", 
         HttpMethod = "Post", 
         Url = "/api/AccountManage/CreateAccount" 
        }; 
       } 

В контроллере:

[HttpPost] 
     public void CreateAccount(CollaborateurModel item) 
     { 
     try{} 
     catch{ 
      // return failure 
      } 
     }   

Мне нужно реализовать failure part выполнить OnFailure метод.

Итак, как я могу выполнить эту задачу?

ответ

1

Вы можете начать с помощью JSon Result (MSDN ref.)

Snippet пример:

[HttpPost] 
public ActionResult CreateAccount(CollaborateurModel item)() 
{ 
    try{ 
     //do operations that may fail 
     var response = new { Success = true}; 
     return Json(response); 
    }catch{ 
     var errorResponse= new { Success = false, ErrorMessage = "error"}; 
     return Json(errorResponse); 
    } 

} 

Тогда на стороне клиента вы называете контроллер с помощью JQuery:

$(function() { 
    $(".test-link").click(function (e) { 
     $.post("controllerName/CreateAccount", function (data) { 
     if (data.Success == true) { 
      alert("Success"); 
     } 
     else {alert(data.ErrorMessage);} 
     }); 
     return false; 
    }).fail(function() { 
     alert("error"); 
    }); 
}); 

терпеть неудачу функции на JQuery будут обрабатывать проблемы связи, которые могут возникнуть с клиент-сервером.

Подробнее о JQuery вы можете найти here.

+0

Это плохая практика смешивать регулярные и Апи контроллер, я думаю, что тип возвращаемого значения может быть 'JsonResult' вместо' ActionResult' –

+0

Контроллеры Web API возвращают непосредственно объекты, которые преобразуются в формат JSON или XML с помощью форматировщик. Вы показываете код для контроллера MVC. Пожалуйста, обновите или удалите ответ ypur. – JotaBe

+0

Это правда, когда я видел контроллер, я думал, что это связано с MVC. Если это MVC, вы можете вернуть JsonResult, это правильно. Вы попробовали это решение или что-то подобное? Lamloumi –

0

В зависимости от вашего желаемого кода статуса ответа вы можете использовать классы результатов BadRequest, NotFound или InternalServerError. Каждый из них имеет конструктор, который имеет необязательный параметр для сообщения об ошибке.

[HttpPost] 
public IHttpActionResult CreateAccount(CollaborateurModel item) 
{ 
    try 
    { 
     // Do your thing 
    } 
    catch 
    { 
     // Return a HTTP 400 result 
     return BadRequest("This is an error message"); 
    } 
}