Asp.net mvc ASP.NET MVC Json 404响应
类似的问题已经被问了一遍又一遍,但由于某种原因,我尝试过的事情都没有奏效。我有一个ajax应用程序,当用户请求一个无效url时,我希望返回一个JsonResult,如下所示:Asp.net mvc ASP.NET MVC Json 404响应,asp.net-mvc,json,http-status-code-404,Asp.net Mvc,Json,Http Status Code 404,类似的问题已经被问了一遍又一遍,但由于某种原因,我尝试过的事情都没有奏效。我有一个ajax应用程序,当用户请求一个无效url时,我希望返回一个JsonResult,如下所示: [ error: true, status: 404, message: 'The requested page could not be found... or some other message... '] 我不希望用户仅仅被重定向到web.config文件中定义的错误页面,因为这会使他们退出ajax应用程序 我试
[ error: true, status: 404, message: 'The requested page could not be found... or some other message... ']
我不希望用户仅仅被重定向到web.config文件中定义的错误页面,因为这会使他们退出ajax应用程序
我试过以下几件事:
- 自定义HandleErrorAttribute-结果表明,由于我的代码引发的异常,它们只处理500个错误
- 扩展FilterAttribute并实现IEExceptionFilter的自定义FilterAttribute-与以前的问题相同
- 在基本控制器中重写HandleUnknownAction-无法确定如何从该方法返回JsonResult
- 添加了一个“全部捕获”路由-在找到“全部捕获”路由之前,正在使用我的其他路由
“{controller}/{action}/{id}”
,并将其替换为将请求发送到固定控制器,该控制器返回您想要的类似404的响应
或者使用标准Asp.Net错误处理重定向到将执行相同操作的路由。就我个人而言,我更喜欢这种解决方案,因为它意味着您不必将大量路由编码到全局路由中。您可以尝试一下,为404创建您想要的任何处理。如果是ajax请求,您可能会返回一条特殊的ajax消息;如果是标准的web浏览器请求,您可能会返回html。如果是您期望的404,您的其他路由如何使用?url/NonExistantController/NonExistantAction/仍然与股票路由/{Controller}/{Action}/{id}匹配因此,在{*url}的“捕获所有”路由运行良好之前使用该路由。那么未知的控制器呢?@NickOlsen-更新了我的答案;基本上要么放弃404全覆盖的默认路线;或者使用Asp.Net自定义错误响应重定向到返回此响应的控制器。如果是IIS 7(我确信是),您也可以在web.config中使用IIS自定义错误来执行相同的操作。
new JsonResult()
{
Data = your_404_data,
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
}.ExecuteResult(ControllerContext);