Asp.net Web Api 路由 和 异常处理
一、路由:
新建一个ASP.NET MVC4 Web Application项目之后,我们会发现在网站根目录下有个App_Start文件夹。找到下面的RouteConfig.cs文件,如下:
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//①默认只有一个参数ID
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional}
);
//②这个是后来自己加的,用来添加两个参数(ID和Name)的访问:
routes.MapHttpRoute(
name: "AnotherApi",
routeTemplate: "api2/{controller}/{action}/{id}/{name}",
defaults: new { id = RouteParameter.Optional, name = RouteParameter.Optional }
);
routes.MapRoute(
name: "DevList",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Data", action = "List", id = UrlParameter.Optional }
);
}
}
Web API Controller
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// GET api/values/5/6
public string Get(int id,int name)
{
return "value";
}
// POST api/values
public void Post(string value)
{
}
// PUT api/values/5
public void Put(int id, string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}
这里有两个路由规则,一个是针对API请求的路由规则,另一个是针对普通MVC页面请求的路由规则,WebAPI请求路径以字符串”api”或"api2"开头访问webAPI的函数,加上“{action}”之后访问中必须加入函数名称。
如下:
没有{action }情况routeTemplate: "api/{controller}/{id}":
http://localhost:3048/api/values
http://localhost:3048/api2/values/1/2
有{action }情况routeTemplate: "api/{controller}/{action}/{id}":
http://localhost:3048/api/get/values
http://localhost:3048/api2/get/values/1/2
Controllers中的函数,默认必须以get、post、put、delete开头,否则无法访问。那有无办法可以不以get/post/put/delete开头了呢?方法有二:
其一:在对应对应的Action之前加上[HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete]属性标签,如下:
public string Get(int id)
{
return "value";
}
其二:亦可以使用如下这样的方法特性来区分,[AcceptVerbs("GET")],[AcceptVerbs("GET", "HEAD")],另外如果你在Controller中写了一个函数必须是public的,必须以Get开头,而又不想让客户端以请求到此Action,那么可以使用方法特性,[NonAction]来标记此方法;
二、异常处理:
当一个web api抛出一个异常后,此异常会被转化成一个HTTP响应,我们不仅可以使用默认的HttpResponseMessage,而且可以进行自定义:
默认:
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
return item;
}
自定义:
{
Product item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.ExpectationFailed) {
Content = new StringContent("DataBase Connection Faield"),
ReasonPhrase = "DataBase Connection Faield "
});
}
return item;
}
参考链接:
http://www.cnblogs.com/liulun/archive/2012/06/20/2556556.html
http://www.cnblogs.com/liulun/archive/2012/07/09/2582733.html
Asp.net Web Api 路由 和 异常处理相关推荐
- ASP.NET Web API 路由对象介绍
前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了一些微小的修改,这也是根据每个框架的特性来制定 ...
- ASP.NET Web API路由规则(二)
默认的规则 在ASP.NET MVC4中 global.asax.cs代码中并无注册默认路由规则的代码 代码如下: public class WebApiApplication : System.We ...
- ASP.NET Web API WebHost宿主环境中管道、路由
ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- 《ASP.NET Web API 2框架揭秘》
<ASP.NET Web API 2框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121235368 上架时间:2014-7-5 出版日期:2014 年7 ...
- ASP NET Web API 2框架揭秘
ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著 ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...
- 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session
原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...
- ASP.NET Web API的Controller是如何被创建的?
Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...
- ASP.NET Web API 2 入门教程
译者:jiankunking 出处:http://blog.csdn.net/jiankunking 源码下载 HTTP不仅提供web页面服务,在构建公开服务和数据api方面,它也是一个强大的平台.H ...
最新文章
- WebService相关
- 理解图像的傅里叶变换(细心分析)
- pwntools解题脚本模板
- 零基础学Python-爬虫-2、scrapy框架(测试案例篇·技术点在后面文章内讲解)【测试将一篇小说的所有访问路径与标题存储到一个文件下】
- java改写模式_Java基于状态模式实现的文档编辑模式切换功能实例
- [mybatis]全局配置文件标签顺序
- JSF – PrimeFaces和休眠集成项目
- Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决
- ECS事件通知之创建失败事件
- 曾鸣[长江商学院教授]_互动百科
- undefined reference to libiconv_open'
- rust怎么关阳光指令_我家也有庭院多好,伸缩阳光房装上,能休闲能当车库,还不算违建...
- 配置ANDROID开发环境的方法
- 苹果公布 macOS Monterey 兼容机型列表
- 数据结构基本知识点(二)
- php 中文逗号 转英文,PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式...
- 【PCL】NDT点云配准(Registration)
- U-BOOT 下载 GitHub
- 计算机的正确配置文件,Windows10如何正确配置显示器颜色配置文件?
- mysql创建用户表的sql语句,mysql创建表的sql语句
热门文章
- CORS - 引入预检请求的动机是什么?
- 什么是Android上的“上下文”?
- java平台沙箱安全组件,安全-如何创建Java沙箱?
- oracle trigger 延迟执行_springboot中定时任务执行Quartz的使用
- Git:如何在本地没有分支时,切换分支
- mybatis plus 事务管理器_学习MyBatis 框架
- python中如何创建一个空列表_Python创建空列表的字典2种方法详解
- 【Spring第五篇】Autowired:自动装配
- HoloLens 2开发:使用Gaze开发,视线小球不停向眼端移动
- python中集合的元素可以是_python中的集合