【问题标题】:Throw exception in ActionResult method在 ActionResult 方法中抛出异常
【发布时间】:2013-12-13 15:59:48
【问题描述】:

我有一个上传控制器的视图,它会触发这个 ActionResult:

    [HttpPost]
    public ActionResult ProcessSubmitUpload(HttpPostedFileBase attachments, Guid? idDocument)
    {
          //Validations
          var xmlDocument = XDocument.Load(attachments.InputStream);
          DocumentCommonHelper.SendFile(xmlDocument);
    }

SendFile 方法:

  public static void SendCte(XDocument xmlDocument)
  {
       var client = new WsSoapClient();
       client.InsertXML(xmlDocument);
  }

如果出现问题,Web 服务会返回 SoapException,例如: “IDDocument 不存在”等

但在 MVC 中,当我调试时,如果 InsertXml 方法出现问题,我无法捕捉到它,调试导航就会停止并抛出 Upload File 错误。

我想在我的操作中捕获 InsertXML 方法的返回消息并将其返回到我的视图中。就像一个“警报”弹出窗口。 我该怎么做?

【问题讨论】:

  • 使用try{}catch{} 捕获错误。如果你想要一个弹出窗口,我会考虑使用 Jquery UI Dialog 。通过 jquery 或 javascript 处理异步操作将允许您捕获返回的消息或 HTML 并生成您的对话框。
  • @James 我需要处理什么样的异常?
  • 你应该首先处理你认为可以返回的任何异常,然后总是最后处理exception以捕获任何其他异常。

标签: c# asp.net-mvc web-services exception soap


【解决方案1】:

您可以将错误消息返回到 ModelState 对象中的视图。视图可以使用 ValidationSummary 助手显示它:

[HttpPost]
public ActionResult ProcessSubmitUpload(HttpPostedFileBase attachments, Guid? idDocument)
{
      //Validations
      var xmlDocument = XDocument.Load(attachments.InputStream);
      try
      {
          DocumentCommonHelper.SendFile(xmlDocument);
      }
      catch(Exception ex)
      {
          ModelState.AddModelError("ProcessSubmitUpload", ex.Message);
          return View(new MyViewModel())
      }
}

查看:

@using(Html.BeginForm("ProcessSubmitUpload", "MyController", FormMethod.Post))
{
    @Html.ValidationSummary()
    ... etc.
}

【讨论】:

  • Exception类型的ex.Message属性会返回InsertXML响应吗?在这种情况下我可以使用“throw new”吗?
  • 它将包含在您的 SendFile(或 InsertXML)方法中引发的异常的描述。
  • 抱歉,没有阅读您的第二个问题。如果您在此处的处理程序中抛出新异常,您将获得黄屏死机(或您自己的自定义错误页面,如果已配置)。如果您想给用户一条消息,您需要处理异常(如我的示例)并将用户错误消息返回到视图以与其他错误消息兼容的方式(例如验证)显示。 ModelState 是这样做的正常方式,因为这是 MVC 用于验证消息的方式。
【解决方案2】:

您可以用try..catch 块包装您的SendFile 方法调用,并在catch 部分使用有关故障的适当信息填充返回结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多