本文参考
https://blog.csdn.net/zhoukun1008/article/details/52704651
一、路由表
在ASP.NET Web API中,一个控制器是处理HTTP请求的一个类,控制器里的Public方法是一个动作方法,当Web API框架接收到一个请求,它将这个请求路由到一个动作
为了确定调用哪个动作,框架使用了一个路由表定义在App_Start目录下的WebApiConfig.cs文件
。Web API的默认路由模板是“api/{controller}/{id}”。在这个模板中,“api”是一个文字式路径片段,而{controller}和{id}则是占位符变量。
using System;using System.Collections.Generic;using System.Linq;using System.Web.Http;namespace MvcApplication1{ public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", // routeTemplate:"{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable返回类型的操作启用查询支持。 // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。 // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712。 //config.EnableQuerySupport(); // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行 // 有关详细信息,请参阅: http://www.asp.net/web-api config.EnableSystemDiagnosticsTracing(); } }}
二、更改路由表默认设置
由Controller来确定访问哪个类,再根据Action来确定访问哪个方法
2.1 修改配置文件
找到WebApiConfig.cs文件 将原来的routeTemplate: "api/{controller}/{id}",更改为 routeTemplate:"{controller}/{action}/{id}",
2.2 修改控制器中对应的方法
添加 [HttpGet] QueryAllProducts() ----方法名
代码
////// 查询所有产品 /// ///[HttpGet] public IEnumerable QueryAllProducts() { return products; } /// /// 根据id查询 /// /// ///[HttpGet] public Product QueryProductById(int id) { var product = products.FirstOrDefault((p) => p.Id == id); if (product == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return product; } /// /// 根据种类查询商品 /// /// ///[HttpGet] public IEnumerable QueryProductsByCategory(string category) { return products.Where( (p) => string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase)); }
测试效果
2.3 还可以使用注解属性来代替Action的使用
代码
////// 根据id查询 /// /// ///[HttpGet] [ActionName("Test")] public Product QueryProductById(int id) { var product = products.FirstOrDefault((p) => p.Id == id); if (product == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return product; }
测试效果