ASP.NET Core Web API 如何构建URL?附控制器代码示例
嘿,我来帮你拆解ASP.NET Core Web API里URL的构建逻辑,结合你贴的代码来看就一目了然了:
ASP.NET Core Web API URL构建详解(基于你的代码)
一、控制器级别的路由前缀
首先看控制器头上的这个特性:
[Route("api/[controller]")] public class MarketReportInstancesTableController : BaseController
这里的[Route]是给整个控制器设置路由前缀,其中[controller]是ASP.NET Core内置的路由令牌,会自动替换成控制器类名去掉Controller后缀的部分。你的控制器类名是MarketReportInstancesTableController,所以这个前缀会被解析成:api/MarketReportInstancesTable。
所有这个控制器下的接口URL,都会基于这个前缀来拼接。
二、动作方法的路由配置
再看你的PageData方法:
[HttpGet(Name = "PageData")] public IActionResult PageData([FromQuery] IDataTablesRequest request)
- HTTP动词与路由匹配:
[HttpGet]特性指定这个方法只响应GET请求。因为你没有在HttpGet里额外写路由模板(比如[HttpGet("get-page-data")]),所以这个动作的完整路由就是控制器的前缀本身——也就是说,访问这个接口的URL是:GET https://<你的域名>/api/MarketReportInstancesTable - 路由名称的作用:
Name = "PageData"是给这个路由起了一个唯一名称,主要用来动态生成URL。比如你在代码里可以通过IUrlHelper来生成这个接口的URL:
这样会生成带查询参数的完整URL,非常适合在返回前端的响应里提供跳转链接。var url = Url.Link("PageData", new { draw = 1, start = 0, length = 10 }); - 查询参数的处理:方法参数上的
[FromQuery]表示这个IDataTablesRequest对象的属性会从URL的查询字符串里获取,比如实际请求可能是:GET https://<你的域名>/api/MarketReportInstancesTable?draw=1&start=0&length=10
三、额外的URL构建场景(拓展)
如果需要更灵活的URL,你可以给动作方法加路由模板:
- 比如想让URL包含方法名:
[HttpGet("page-data")],那么完整URL就是api/MarketReportInstancesTable/page-data - 比如需要路由参数:
[HttpGet("page-data/{id:int}")],那么URL可以是api/MarketReportInstancesTable/page-data/123(其中123是id参数的值)
内容的提问来源于stack exchange,提问作者Paul Duer
相关产品推荐
相关产品推荐

