Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.NET MVC Json 404响应_Asp.net Mvc_Json_Http Status Code 404 - Fatal编程技术网

Asp.net mvc ASP.NET MVC Json 404响应

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应用程序 我试

类似的问题已经被问了一遍又一遍,但由于某种原因,我尝试过的事情都没有奏效。我有一个ajax应用程序,当用户请求一个无效url时,我希望返回一个JsonResult,如下所示:

[ 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
  • 添加了一个“全部捕获”路由-在找到“全部捕获”路由之前,正在使用我的其他路由
如有任何想法,将不胜感激

•在基本控制器中重写HandleUnknownAction-无法确定如何从该方法返回JsonResult

已更新以包含您将需要的JsonRequestBehavior

对于与现有控制器或资源不匹配的请求,您有两种选择-放弃标准的“全捕获”路由
“{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);