首页 新闻 会员 周边

关于asp.net web api 异常处理返回统一致的json数据

0
悬赏园豆:30 [已解决问题] 解决于 2014-03-05 20:48

项目开发中使用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": "因为您的操作没有节操,返回完全失败!"
}
21天后的主页 21天后 | 初学一级 | 园豆:3
提问于:2014-03-05 17:16
< >
分享
最佳答案
0

Web.config 中不是有 customErrors  节么?

收获园豆:30
飞扬的尘埃 | 小虾三级 |园豆:1318 | 2014-03-05 17:23

您好,web api 项目web.config没有customErrors  节点。

21天后 | 园豆:3 (初学一级) | 2014-03-05 17:24

@21天后: 呃,那就麻烦您手动添加一个……

参考:http://stackoverflow.com/questions/16251134/mvc-customerrors-in-web-config-where-does-it-go

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2014-03-05 17:26

@飞扬的尘埃: 

<customErrors mode="RemoteOnly" defaultRedirect="~/api/error/notfound">
<error statusCode="500" redirect="~/api/error/notfound" />
<error statusCode="404" redirect="~/api/error/notfound" />
</customErrors>

发生错误后,并没有跳转到指定的路由,这是为何?

21天后 | 园豆:3 (初学一级) | 2014-03-05 17:49

@飞扬的尘埃: 求指点!

21天后 | 园豆:3 (初学一级) | 2014-03-05 17:50

@21天后: 本地调试么?试试看,是不是mode参数的原因。

mode 可选参数有 On, Off, RemoteOnly,如果希望在本地查看跳转效果,应该使用On
默认的 RemoteOnly 是为了给开发人员反馈真实的报错原因。

即,On是所有情况下都跳转;RemoteOnly 只在部署后,从非部署机器上访问时才跳转;Off 嘛,当然就是不启用跳转。

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2014-03-05 17:54

@飞扬的尘埃: 是本地调试,mode参数设置为On,仍然跳转不到路由

21天后 | 园豆:3 (初学一级) | 2014-03-05 18:23

@飞扬的尘埃: 问题解决了,自定义错误消息

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天后 | 园豆:3 (初学一级) | 2014-03-05 20:46

@21天后: 嗯,学习了。

飞扬的尘埃 | 园豆:1318 (小虾三级) | 2014-03-05 21:04

@21天后: 你的webapi接口能返回统一格式的json数据了吗?我也在配置文件里配置了,但是始终无法进入重定向的那个action里去

DeltaCat | 园豆:200 (初学一级) | 2016-08-16 11:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册