当前位置: 首页 > 面试题库 >

如何在不引发MVC控制器异常的情况下向$ .ajax报告错误?

燕实
2023-03-14
问题内容

我有一个控制器和一个定义的方法…

[HttpPost]
public ActionResult UpdateUser(UserInformation model){

   // Instead of throwing exception
   throw new InvalidOperationException("Something went wrong");


   // I need something like 
   return ExecutionError("Error Message");

   // which should be received as an error to my 
   // $.ajax at client side...

}

异常问题

  1. 如果发生设备或网络错误(例如SQL Connectivity错误),我们必须记录异常。
  2. 这些消息就像用户的验证消息,我们不想登录。
  3. 引发异常也会淹没事件查看器。

我需要一些简单的方法来向$ .ajax调用报告一些自定义的HTTP状态,以便它应在客户端导致错误,但是我不想抛出错误。

更新

我无法更改客户端脚本,因为它与其他数据源不一致。

到目前为止,HttpStatusCodeResult应该可以工作,但是是IIS引起了这里的问题。无论我设置了什么错误消息,都尝试了所有答案,但我仍然仅收到默认消息。


问题答案:

这是HTTP状态代码起作用的地方。使用Ajax,您将能够相应地处理它们。

[HttpPost]
public ActionResult UpdateUser(UserInformation model){
    if (!UserIsAuthorized())
        return new HttpStatusCodeResult(401, "Custom Error Message 1"); // Unauthorized
    if (!model.IsValid)
        return new HttpStatusCodeResult(400, "Custom Error Message 2"); // Bad Request
    // etc.
}

这是已定义状态代码的列表。



 类似资料:
  • 问题内容: 我需要一种从try / catch块的中间中断而又不会引发异常的方法。类似于中断并继续for循环的操作。这可能吗? 我对于抛出一个自定义异常(将其命名为“ BreakContinueException”)变得很奇怪,该异常在其catch处理程序中什么都不做。我敢肯定这很扭曲。 因此,我不知道任何直接的解决方案吗? 问题答案: 正确的方法可能是通过将try-catch块放在单独的方法中来

  • spring MVC中controllin异常流的良好实践是什么? 假设我有一个DAO类,它将对象保存到数据库中,但如果违反了某些规则,例如名称太长、年龄太低,则抛出异常, 现在,如果我想保存名称超过10的A,它应该抛出异常。 但是有一个dataManipulator对象 和控制器 我希望在不抛出异常的情况下保留控制器(我听说这是一个很好的做法)。 但我的问题是,在这种情况下,A\u Data\u

  • 问题内容: 我有以下情况。 我有一个从另一个基类继承并重写一个方法的Java类。基本方法不会引发异常,因此没有声明。 现在我自己的方法应该能够引发异常,但是我要么有选择 吞下异常 添加抛出声明 两者都不令人满意,因为第一个会默默地忽略异常(好的,我可以执行一些日志记录),第二个会因为方法头不同而产生编译器错误。 问题答案: 如果确实需要,可以抛出未经检查的异常而不必声明它们。未检查的异常扩展。扩展

  • 我正在使用ExecutorService运行一些可调用线程。线程在提交到ExecutorService之前用数据初始化。 在处理Future.get()引发的异常时,我希望使用原始数据记录一条消息。是否可以从未来对象返回到创建它的原始线程? 伪代码:

  • 我正在使用React和Redux,我需要用更新的数据更新我的状态。“我的状态”包含如下对象数组: 所以在这个reducer中,我只想用我的负载替换或更新整个状态数组,但不改变我的状态。我的有效负载还包含与上面相同的对象数组,但包含更新的数据。

  • 我一直在试图确定如何检测点异常给定窗口异常。 更详细地说,我知道每个30天窗口是否包含异常。例如,窗口1从2009年1月1日开始,窗口2从2009年1月2日开始,依此类推。 现在我正试图利用这些知识来确定这些异常发生的日期。如果我在2009年5月1日至2009年8月1日期间出现异常,我的窗口将从2009年1月8日最后一天的窗口发出窗口信号,从2009年5日开始。 我只是不明白如何使用窗口找到出现异