(精华)2020年9月18日 ASP.NET Core 路由解析详解
【摘要】
公共部分
public class WeatherReport
{
private static readonly string[] Conditions = {"晴", "多云...
公共部分
public class WeatherReport
{
private static readonly string[] Conditions = {"晴", "多云", "小雨"};
private static readonly Random Random = new Random();
public string City { get; }
public IDictionary<DateTime, WeatherInfo> WeatherInfos { get; }
public class WeatherInfo
{
/// <summary>
/// 天气状况
/// </summary>
public string Condition { get; set; }
/// <summary>
/// 最高温度
/// </summary>
public double HighTemperature { get; set; }
/// <summary>
/// 最低温度
/// </summary>
public double LowTemperature { get; set; }
}
public WeatherReport(string city, int days)
{
City = city;
WeatherInfos = new Dictionary<DateTime, WeatherInfo>();
for (var i = 0; i < days; i++)
WeatherInfos[DateTime.Today.AddDays(i + 1)] = new WeatherInfo
{
Condition = Conditions[Random.Next(0, 2)],
HighTemperature = Random.Next(20, 30),
LowTemperature = Random.Next(10, 20)
};
}
}
路由的解析和view页面返回
public static class Sample01
{
private static readonly Dictionary<string, string> Cities = new Dictionary<string, string>
{
["010"] = "北京",
["027"] = "武汉"
};
public static void Run()
{
// const string template = @"weather/{city:regex(^{0\d{{2,3}}$)}/{days:int:range(1,4)}";
const string template = @"weather/{city}/{days}";
//const string template = @"weather/{city?}/{days?}";
//const string template = @"weather/{city=010}/{days=4}";
Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(builder => builder
.ConfigureServices(csv => csv.AddRouting())
.Configure(app => app
.UseRouting()
.UseEndpoints(endpoints => endpoints.MapGet(template, WeatherForecast))))
.Build()
.Run();
}
public static async Task WeatherForecast(HttpContext context)
{
var city = (string) context.GetRouteData().Values["city"];
city = Cities[city];
var days = int.Parse(context.GetRouteData().Values["days"].ToString() ?? string.Empty);
var report = new WeatherReport(city, days);
await RendWeatherAsync(context, report);
}
//public static async Task WeatherForecast(HttpContext context)
//{
// var routeValues = context.GetRouteData().Values;
// // 默认值 010
// var city = routeValues.TryGetValue("city", out var v1) ? (string) v1 : "010";
// city = Cities[city];
// // 默认值 4
// var days = routeValues.TryGetValue("city", out var v2) ? int.Parse(v2.ToString() ?? string.Empty) : 4;
// var report = new WeatherReport(city, days);
// await RendWeatherAsync(context, report);
//}
//public static async Task WeatherForecast(HttpContext context)
//{
// var city = (string) context.GetRouteData().Values["city"];
// city = Cities[city];
// var days = int.Parse(context.GetRouteData().Values["days"].ToString() ?? string.Empty);
// var report = new WeatherReport(city, days);
// await RendWeatherAsync(context, report);
//}
private static async Task RendWeatherAsync(HttpContext context, WeatherReport report)
{
context.Response.ContentType = "text/html;charset=utf-8";
await context.Response.WriteAsync("<html><head><title>天气</title></head><body>");
await context.Response.WriteAsync($"<h3>{report.City}</h3>");
foreach (var (key, value) in report.WeatherInfos)
{
await context.Response.WriteAsync($"{key:yyyy-MM-dd}:");
await context.Response.WriteAsync(
$"{value.Condition}({value.LowTemperature}℃ ~ {value.HighTemperature}℃)<br/><br/> ");
}
await context.Response.WriteAsync("</body></html>");
}
}
文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。
原文链接:codeboy.blog.csdn.net/article/details/108524635
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)