【发布时间】:2022-11-01 13:58:51
【问题描述】:
我有一个名为的 WebAPI 控制器天气预报一次操作。操作方法如下:
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
但是,HttpGet.Name = "GetWeatherForecast" 应该定义一个路由名称“GetWeatherForecast”,因为我了解该属性的Name 属性的用途。
但 Swagger 向我展示了操作本身根本没有路线: 显示的网址是https://localhost:port/WeatherForecast(服务操作可以通过那个url消费,我用postman测试)
但是使用带有 Name 属性集的 HttpGet 属性,我希望它是 https://localhost:port/WeaterhForecast/获取天气预报
当我在操作方法上额外使用Route属性(Route("GetWeatherForecast"))时,操作路径如下: https://localhost:port/WeaterhForecast/获取天气预报(现在确实可以通过该 URL 访问服务操作)。
所以,问题是:为什么HttpGet 属性的Name 属性不符合文档承诺的要求?或者HttpGetAttribute.Name 的真正用途是什么?
源代码是使用 .NET 6.0 和 VS 2022 制作的,项目类型为 ASP.NET Core-Web-API。显示的代码来自项目模板自动创建的控制器。
【问题讨论】:
标签: c# asp.net asp.net-core asp.net-web-api-routing