Asp.net web api 开发遇到的一个问题

问题描述

我定义了一个这样的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”,这样转化肯定失败),所以我想提示“你输入的参数无效”不知如何做。

时间: 2024-10-25 08:20:14

Asp.net web api 开发遇到的一个问题的相关文章

通过ASP.NET Web API + JQuery创建一个简单的Web应用

看了dudu的<HttpClient + ASP.NET Web API, WCF之外的另一个选择>一文,想起多很久之前体现ASP.NET Web API而创建的一个Demo.这是一个只涉及到简单CRUD操作的Web应用,业务逻辑以Web API的形式定义并以服务的形式发布出来,前台通过jQuery处理用户交互并调用后台服务. 一.一个简单的基于CRUD的Web应用 这个简单的Demo应用用于模拟"联系人管理".当页面加载的时候,所有的联系人列表被列出来.在同一个页面中,我

ASP.NET Web API路由系统:Web Host下的URL路由

ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于不同的应用程序中.如果采用Web Host的方式将定义Web API寄宿于一个Web应用之中,其实最终的URL路由还是通过ASP.NET本身的路由系统完成的,那么两个路由系统之间是如何衔接在一起的呢?.[本文已经同步到<How ASP.NET Web API Works?>] 目录 一.Hoste

ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事

从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCorsAttribute特性.但是整个CORS体系不限于此,在它们背后隐藏着一系列的类型,我们将会利用本章余下的内容对此作全面讲述,今天我们就来讨论一下用于定义CORS授权策略的EnableCorsAttribute特性背后的故事. 目录 一.CorsPolicy 二.CorsPolicyProvider 三.CorsPolicyProvid

Asp.Net Web API 2第一课——入门

原文:Asp.Net Web API 2第一课--入门 前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎任何的平台都会有HTTP服务库.HTTP服务可以涉及到范围广泛的客户端,包括浏览器.各种移动设备和传统的桌面应用程序. Asp.Net Web API是在.NET Framework框架上用于建立Web APIs的一个框架.在这个教程中,你将会使用Asp.Net Web API框架来创建一个能够返

通过Knockout.js + ASP.NET Web API构建一个简单的CRUD应用

较之面向最终消费者的网站,企业级Web应用对用户体验的要求要低一些.不过客户对"用户体验"的要求是"与日俱增"的,很多被"惯坏了"的用户已经不能忍受Postback带来的页面刷新,所以Ajax在企业级Web应用中得到了广泛的应用.企业级Web应用的一个特点是以"数据处理"为主,所以"面向绑定"的Knockout.js 是一个不错的选择.ASP.NET Web API,作为.NET平台最好的REST服务开发平

【ASP.NET Web API教程】1.1 第一个ASP.NET Web API

原文 [ASP.NET Web API教程]1.1 第一个ASP.NET Web API Your First ASP.NET Web API (C#)第一个ASP.NET Web API(C#) By Mike Wasson|January 21, 2012作者:Mike Wasson | 日期:2012-1-21 本文引自:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your

创建一个完整的ASP.NET Web API项目_实用技巧

Visual Studio为我们提供了专门用于创建ASP.NET Web API应用的项目模板,借助于此项目模板提供的向导,我们可以"一键式"创建一个完整的ASP.NET Web API项目.在项目创建过程中,Visual Studio会自动为我们添加必要的程序集引用和配置,甚至会为我们自动生成相关的代码,总之一句话:这种通过向导生成的项目在被创建之后其本身就是一个可执行的应用.一.通过VS2013..NET 4.5.1创建一个Web API项目1.解决方案下面新建项目 2.选择项目W

ASP.NET MVC Web API 学习笔记---第一个Web API程序

1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验.所以我相信Web API会越来越有它的用武之地. 说道Web API很多人都会想到Web服务,但是他们仍然有一定的区别:Web API服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP)  2. ASP.NET

在ASP.NET Web API中使用OData

一.什么是ODataOData是一个开放的数据协议(Open Data Protocol) 在ASP.NET Web API中, 对于CRUD(create, read, update, and delete)应用比传统WebAPI增加了很大的灵活性 只要正确使用相关的协议,可以在同等情况下 对一个CRUD应用可以节约很多开发时间,从而提高开发效率 二.怎么搭建 做一个简单的订单查询示例 我们使用Code First模式创建两个实体对象Product(产品),Supplier(供应商) 1.新建