问题描述
我定义了一个这样的API方法:publicHttpResponseMessageGetProductMsg(intid)参数类型是int,这时候我去访问这个API:http://localhost:5543/api/Product/GetProductMsg?id=1这样访问是正常的,当我传入参数不是int型时:http://localhost:5543/api/Product/GetProductMsg?id=fff就会报一大串的异常,一般这种异常是不能呈现给用户的。问题:我该如何做才能抛出我指定的异常消息,比如提示:参数无效,经调试在进入这个action时就已经产生这个异常了。
解决方案
解决方案二:
解决方案三:
解决方案四:
1:第一种:你在路由的时候,不对这个参数进行设置(你应该设为为int类型),然后后台检验2:第二种:在路由设定页面(捕捉不正确路由页面),后台的action处理这个数据
解决方案五:
不知道你的返回格式是什麼,但是一般我不會建議直接拋出HttpResponseException在我開發過的項目中,JSON通信和XML格式通信是最常用的;你要明白API是標準化的,因此最好定義標準的返回格式一個基本的返回結構應當包含:errorCode、errorMessage和data,在發生特定異常時我們返回特定的errorCode和errorMessage,提供給用戶的文檔中也要寫明這個錯誤碼的意義。而成功的請求errorCode一般規定為0(也可以隨意你定)使用這種處理方法,用戶只需要明白errorCode為0時就是成功的操作,接下來就可以對data進行解析;其他情況均為不成功,然後查看errorMessage,看看具體的出錯內容
解决方案六:
额,我只能说你操心的多余了。请先考虑以下到底是谁在用滴的webapi访问,是最终用户么??绝对不是最终用户,是其他程序员在其他程序里面访问,所以异常他们自己处理,ajax就不出异常么,webclient不出异常么,都会出异常,所以处理异常在那些程序员身上而最终客户看到滴是他们处理过的结果(你也别想,一堆直接最终客户去访问那个webapi,对你来说貌似能理解,外行客户恐怕只认为一堆json(xml)是恐怖的天书)
解决方案七:
顶起这篇文章
解决方案八:
当然也不是完全没有办法去做,你可以在global里面整体截获异常,也可以自己实现一个特性,并实现IActionHttpMethodProvider接口,也可以把log4net这类东西的输出过程改掉(改成对网络输出而非文件输出)
解决方案九:
actionfilter
解决方案十:
http://blogs.msdn.com/b/youssefm/archive/2012/06/28/error-handling-in-asp-net-webapi.aspx
解决方案十一:
引用1楼wangnaisheng的回复:这个我早看过了,他是处理方法内的异常,而我说的异常是因为参数输入的类型不对,是执行这个方法前参数的异常。
解决方案十二:
引用5楼wanghui0380的回复:
额,我只能说你操心的多余了。请先考虑以下到底是谁在用滴的webapi访问,是最终用户么??绝对不是最终用户,是其他程序员在其他程序里面访问,所以异常他们自己处理,ajax就不出异常么,webclient不出异常么,都会出异常,所以处理异常在那些程序员身上而最终客户看到滴是他们处理过的结果(你也别想,一堆直接最终客户去访问那个webapi,对你来说貌似能理解,外行客户恐怕只认为一堆json(xml)是恐怖的天书)
因为抛出的异常就算是开发人员也不知道什么意思,有些异常提示很那个.....比如我这个异常,我想提示“参数无效,请输入int型”这样,如何处理?我也看了很多相关异常处理的,打多是处理方法中执行时产生的异常,我我这个异常是调用方法时,由于参数类型不对产生的,还没有到执行方法那一步
解决方案十三:
引用7楼wanghui0380的回复:
当然也不是完全没有办法去做,你可以在global里面整体截获异常,也可以自己实现一个特性,并实现IActionHttpMethodProvider接口,也可以把log4net这类东西的输出过程改掉(改成对网络输出而非文件输出)
试过了,但是整体截取异常的话,我还是无法对异常进行针对性的处理,比如我的这个异常是由于调用者输入了无效的参数(应该输入i数字,而他输入了字符“fff”,这样转化肯定失败),所以我想提示“你输入的参数无效”不知如何做。