一、路由:

新建一个ASP.NET MVC4 Web Application项目之后,我们会发现在网站根目录下有个App_Start文件夹。找到下面的RouteConfig.cs文件,如下:

public class RouteConfig 
{

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

public class ValuesController : ApiController
    {
        // 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]属性标签,如下:

[HttpGet]
public string Get(int id)
{
      return "value";

其二:亦可以使用如下这样的方法特性来区分,[AcceptVerbs("GET")],[AcceptVerbs("GET", "HEAD")],另外如果你在Controller中写了一个函数必须是public的,必须以Get开头,而又不想让客户端以请求到此Action,那么可以使用方法特性,[NonAction]来标记此方法;

二、异常处理:

当一个web api抛出一个异常后,此异常会被转化成一个HTTP响应,我们不仅可以使用默认的HttpResponseMessage,而且可以进行自定义:
默认:

public Product GetProduct(int id) 

    Product item = repository.Get(id); 
    if (item == null) 
    { 
        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)); 
    } 
    return item; 

自定义:

public Product GetProduct(int id) 

    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 路由 和 异常处理相关推荐

  1. ASP.NET Web API 路由对象介绍

    前言 在ASP.NET.ASP.NET MVC和ASP.NET Web API这些框架中都会发现有路由的身影,它们的原理都差不多,只不过在不同的环境下作了一些微小的修改,这也是根据每个框架的特性来制定 ...

  2. ASP.NET Web API路由规则(二)

    默认的规则 在ASP.NET MVC4中 global.asax.cs代码中并无注册默认路由规则的代码 代码如下: public class WebApiApplication : System.We ...

  3. ASP.NET Web API WebHost宿主环境中管道、路由

    ASP.NET Web API WebHost宿主环境中管道.路由 前言 上篇中说到ASP.NET Web API框架在SelfHost环境中管道.路由的一个形态,本篇就来说明一下在WebHost环境 ...

  4. ASP.NET Web API Selfhost宿主环境中管道、路由

    ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...

  5. 《ASP.NET Web API 2框架揭秘》

    <ASP.NET Web API 2框架揭秘> 基本信息 作者: 蒋金楠 出版社:电子工业出版社 ISBN:9787121235368 上架时间:2014-7-5 出版日期:2014 年7 ...

  6. ASP NET Web API 2框架揭秘

    ASP.NET Web API2框架揭秘(.NET领域再现力作顶级专家精讲微软全新轻量级通信平台) 蒋金楠 著   ISBN 978-7-121-23536-8 2014年7月出版 定价:108.00 ...

  7. 购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session

    原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(2)--前端,以及前后端Session chsakell分享了前端使用AngularJS,后端使用ASP.NE ...

  8. ASP.NET Web API的Controller是如何被创建的?

    Web API调用请求的目标是定义在某个HttpController类型中的某个Action方法,所以消息处理管道最终需要激活目标HttpController对象.调用请求的URI会携带目标HttpC ...

  9. ASP.NET Web API 2 入门教程

    译者:jiankunking 出处:http://blog.csdn.net/jiankunking 源码下载 HTTP不仅提供web页面服务,在构建公开服务和数据api方面,它也是一个强大的平台.H ...

最新文章

  1. WebService相关
  2. 理解图像的傅里叶变换(细心分析)
  3. pwntools解题脚本模板
  4. 零基础学Python-爬虫-2、scrapy框架(测试案例篇·技术点在后面文章内讲解)【测试将一篇小说的所有访问路径与标题存储到一个文件下】
  5. java改写模式_Java基于状态模式实现的文档编辑模式切换功能实例
  6. [mybatis]全局配置文件标签顺序
  7. JSF – PrimeFaces和休眠集成项目
  8. Sublime Text提示Unable to download XXX. Please view the console for more details安装插件失败解决
  9. ECS事件通知之创建失败事件
  10. 曾鸣[长江商学院教授]_互动百科
  11. undefined reference to libiconv_open'
  12. rust怎么关阳光指令_我家也有庭院多好,伸缩阳光房装上,能休闲能当车库,还不算违建...
  13. 配置ANDROID开发环境的方法
  14. 苹果公布 macOS Monterey 兼容机型列表
  15. 数据结构基本知识点(二)
  16. php 中文逗号 转英文,PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式...
  17. 【PCL】NDT点云配准(Registration)
  18. U-BOOT 下载 GitHub
  19. 计算机的正确配置文件,Windows10如何正确配置显示器颜色配置文件?
  20. mysql创建用户表的sql语句,mysql创建表的sql语句

热门文章

  1. CORS - 引入预检请求的动机是什么?
  2. 什么是Android上的“上下文”?
  3. java平台沙箱安全组件,安全-如何创建Java沙箱?
  4. oracle trigger 延迟执行_springboot中定时任务执行Quartz的使用
  5. Git:如何在本地没有分支时,切换分支
  6. mybatis plus 事务管理器_学习MyBatis 框架
  7. python中如何创建一个空列表_Python创建空列表的字典2种方法详解
  8. 【Spring第五篇】Autowired:自动装配
  9. HoloLens 2开发:使用Gaze开发,视线小球不停向眼端移动
  10. python中集合的元素可以是_python中的集合