Asp.net Web Api 路由 和 异常处理

一、路由:

新建一个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 

转载于:https://www.cnblogs.com/zhangpengshou/archive/2012/07/16/2593053.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值