【问题标题】:Implement Onfailure in webApi controller在 webApi 控制器中实现 Onfailure
【发布时间】:2015-06-08 22:32:43
【问题描述】:

我有一个 Web Api,其中有这段代码

                   @{
                    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方法。

那么我该如何完成这个任务呢?

【问题讨论】:

    标签: javascript c# ajax razor asp.net-web-api


    【解决方案1】:

    您可以从使用 Json Result (MSDN ref.) 开始

    片段示例:

    [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 上的 fail 函数将处理您可能遇到的客户端-服务器通信问题。

    更多关于 JQuery 的信息你可以找到它here

    【讨论】:

    • 将常规控制器和 APi 控制器混合使用是一种不好的做法,我认为返回类型可以是 JsonResult 而不是 ActionResult
    • Web API 控制器直接返回由格式化程序转换为 JSON 或 XML 的对象。您展示的是 MVC 控制器的代码。请更新或删除您的答案。
    • 确实如此,我看到controller的时候还以为跟MVC有关。如果它是一个 MVC 你可以返回 JsonResult,这是正确的。您是否尝试过此解决方案或类似的解决方案?拉姆卢米
    【解决方案2】:

    根据您想要的响应状态代码,您可以使用 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");
        }
    }  
    

    【讨论】:

      猜你喜欢
      • 2016-10-25
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-18
      • 2012-12-12
      • 1970-01-01
      相关资源
      最近更新 更多