asp.net webAPI 简单修改路由

本文介绍了如何在ASP.NET WebAPI项目中修改默认路由规则以符合个人习惯。作者展示了从新建项目到运行默认路由,然后探讨了RESTful风格中不使用action的原因。通过在控制器方法上添加[Route]特性,可以实现类似ASP.NET MVC的路由方式,使得URL更直观。此外,还展示了CustomerController和ProductsController的示例,说明了如何自定义路由规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近来刚刚开始做web api的项目, 本人菜鸟,有误请见谅, 下面一段关于web api默认路由的简单修改描述。

首先在visual studio 2017新建一个web api 的项目:

建好之后,可以看到一些默认的文件:

比如说 controllers 文件夹里面有:homeController 和 ValuesController  ;   App_Start文件夹里面有 RouteConfig 和  WebApiConfig ;

我们不修改任何东西, 先运行看看结果:

运行之后,可以看到home.Index页面 ,  然后我们试一试 ValuesController  里面的方法:

在地址栏输入:

http://localhost:xxx/api/values

http://localhost:xxx/api/values/57

就能看到  valuescontroller里面的 方法返回值:

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"+id;
        }

看到这里,我会非常不习惯 webAPI 的路由规则, 看了看 routing 规则 : WebApiConfig.cs 文件才发现:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
                );

             

        }
    }

Default 里面是  api/{controller}/{id}  的规则, 不想asp./net mvc 里面默认的 "{controller}/{action}/{id}" 

我看了看网上的文章说 Restful风格中不关注 action 的定义 , 所以默认路由就是没有action这也串字符的。

由于不习惯,我可以修改WebApiConfig 里面的 Routes 代码  。 

除了修改WebApiConfig 里面的 Routes 代 ,我在网上还看到了一个更加直观的方式: ,比如说我新建了两个controller :

public class CustomerController : ApiController
    {
         

        [HttpGet]
        [Route("api/Customer/add")]
        public IHttpActionResult AddNewCustomer(int id , string name )
        {
            Customer c1 = new Customer { CustomerID = id, CustomerName = name };
            return Ok(c1);
        }

    }



 public class ProductsController : ApiController
    {
       

        Product[] products = new Product[] {
            new Product {  Name="唐诗三百首" , Category="图书" , Price =50 },
            new Product { Name="服务模式" , Category="图书" , Price=40 },
            new Product { Name="可乐"  , Category="食物" , Price=3}
        };

        [Route("api/Products/GetAll")]
        public IEnumerable<Product> GetAllProduct()
        {
            return products;
        }

        [Route("api/Products/Getbyname")]
        public IHttpActionResult GetProductByName(string name)
        {
            var p = products.Where(x => x.Name == name);
            if (p == null)
            {
                return NotFound();
            }
            return Ok(p);
        }


    }

我分别在 各个ActionResult 前面加入了 [Route("xx/xx")] 

这个代码就能改变controller/action 的路由了,

比如

http://localhost:xxx/api/customer/add?id=2&name=雄安

http://localhost:xxx/api/Products/Getbyname?name=可乐

http://localhost:xxx/api/Products/getall

这样子的话,就跟原本用的MVC差不多了 ,  其实我也不知道默认路由下不用action 的意图是什么。。。菜鸟无法回答,只能用自己熟悉的。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值