项目开发中使用asp.net mvc 4 web api ,异常处理时遇到一个问题:
如果请求的路由不存在或http动作不匹配,框架默认返回了一个错误的son数据:
{ "Message": "未找到与请求 URI“http://localhost:8044/api/ClientType/get22”匹配的 HTTP 资源。", "MessageDetail": "在控制器“ClientType”上找不到与名称“get22”匹配的操作。" }
框架返回的数据,应该是一个HttpError对象。
是否有办法返回一段我需要的json结构?
我定义的json结构:
{ "code": 500, "msg": "因为您的操作没有节操,返回完全失败!" }
Web.config 中不是有 customErrors 节么?
您好,web api 项目web.config没有customErrors 节点。
@21天后: 呃,那就麻烦您手动添加一个……
参考:http://stackoverflow.com/questions/16251134/mvc-customerrors-in-web-config-where-does-it-go
@飞扬的尘埃:
<customErrors mode="RemoteOnly" defaultRedirect="~/api/error/notfound">
<error statusCode="500" redirect="~/api/error/notfound" />
<error statusCode="404" redirect="~/api/error/notfound" />
</customErrors>
发生错误后,并没有跳转到指定的路由,这是为何?
@飞扬的尘埃: 求指点!
@21天后: 本地调试么?试试看,是不是mode参数的原因。
mode 可选参数有 On, Off, RemoteOnly,如果希望在本地查看跳转效果,应该使用On
默认的 RemoteOnly 是为了给开发人员反馈真实的报错原因。
即,On是所有情况下都跳转;RemoteOnly 只在部署后,从非部署机器上访问时才跳转;Off 嘛,当然就是不启用跳转。
@飞扬的尘埃: 是本地调试,mode参数设置为On,仍然跳转不到路由
@飞扬的尘埃: 问题解决了,自定义错误消息
http://www.iis.net/configreference/system.webserver/httperrors
猜测你说的customErrors可能只是IIS6及以下版本支持,本地调试时IIS Express 都是7以上版本,不支持customErrors节点配置。
<system.webServer> <httpErrors existingResponse="Replace" defaultResponseMode="Redirect" errorMode="Custom"> <remove statusCode="404"/> <error statusCode="404" responseMode="Redirect" path="/api/error/notfound"/> </httpErrors> </system.webServer>
@21天后: 嗯,学习了。
@21天后: 你的webapi接口能返回统一格式的json数据了吗?我也在配置文件里配置了,但是始终无法进入重定向的那个action里去