如何用ASP.NET Core 6路由构建RESTful API?
摘要:借助路由系统提供的请求URL模式与对应终结点之间的映射关系,我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理。ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware
借助路由系统提供的请求URL模式与对应终结点之间的映射关系,我们可以将具有相同URL模式的请求分发给与之匹配的终结点进行处理。ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的,它们在ASP.NET平台上具有举足轻重的地位,MVC和gRPC框架,Dapr的Actor和发布订阅编程模式都建立在路由系统之上。Minimal API更是将提升到了前所未有的高度,是我们直接在路由系统基础上定义REST API。(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》)
[S2001]注册路由终结点 (源代码)
[S2002]以内联方式设置路由参数的约束(源代码)
[S2003]定义可缺省的路由参数(源代码)
[S2004]为路由参数指定默认值(源代码)
[S2005]一个路径分段定义多个路由参数(源代码)
[S2006]一个路由参数跨越多个路径分段(源代码)
[S2007]主机名绑定(源代码)
[S2008]将终结点处理定义为任意类型的委托(源代码)
[S2009]IResult 的应用(源代码)
[S2001]注册路由终结点我们演示的这个ASP.NET应用是一个简易版的天气预报站点。服务端利用注册的一个终结点来提供某个城市在未来N天之内的天气信息,对应城市(采用电话区号表示)和天数直接至于请求URL的路径中。如图1所示,为了得到成都未来两天的天气信息,我们将发送请求的路径设置为“weather/028/2”。路径为“weather/0512/4”的请求返回就是苏州未来4天的天气信息。
图1 获取天气预报信息
演示程序定义了如下这个WeatherReport记录类型来表示某个城市在某段时间范围内的天气报告。如代码片段所示,某一天的天气体现为一个WeatherInfo记录。简单起见,我们让WeatherInfo记录只携带基本天气状况和气温区间的信息。
public readonly record struct WeatherInfo(string Condition, double HighTemperature, double LowTemperature);
public readonly record struct WeatherReport(string CityCode, string CityName,IDictionary<DateTime, WeatherInfo> WeatherInfos);
我们定义了如下这个工具类型WeatherReportUtility,两个Generate方法会根据指定的城市代码和天数/日期生成一份由WeatherReport对象表示的天气报告。为了将这份报告呈现在网页上,我们定义了另一个RenderAsync方法将指定的WeatherReport转换成HTML,并利用指定的HttpContext上下文将它作为响应内容,具体的HTML内容由AsHtml方法生成。
