在控制器中获取请求的 WebApi 版本
Get the requested version of WebApi inside the controller
我在 Asp.NET Core 3 WebApi 项目中添加了 WebAPI 的版本控制:
public void ConfigureServices(IServiceCollection services)
{
services.AddApiVersioning(
options =>
{
// reporting api versions will return the headers "api-supported-versions" and "api-deprecated-versions"
options.ReportApiVersions = true;
});
services.AddVersionedApiExplorer(
options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
...other configs...
}
所以现在我可以在我的控制器中添加版本:
[Route("[controller]")]
[ApiController]
public class SurveysController : ControllerBase
{
[HttpGet]
[ApiVersion("1.0")]
public ActionResult Get(int adm0Code = 0, int page = 1)
{
}
}
问题是,在 API 响应中,有时我还包括 link 到其他端点。
例如:
OriginalCsvFile = (s.SurveyStatusID==2) ? (baseUrl + "/Surveys/ExportToCSV?surveyID="+ s.SurveyID) : ""
在添加所需的版本控制后,它不再起作用。
我想在控制器的方法中检索用户请求的版本,以便我可以在 link 中包含我构建到其他端点。
我不能硬编码,因为我可能会遇到一种方法对多个版本有效的情况:
[HttpGet]
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public ActionResult Get(int adm0Code = 0, int page = 1)
{
}
JSON输出示例为:
{
"page": 1,
"items": [
{
"surveyID": 19,
"surveyStatusID": 2,
"surveyCreateDate": "2020-05-21T11:51:15.853",
"surveyStartDate": "2020-05-04T00:00:00",
"surveyEndDate": "2020-05-08T00:00:00",
"surveyValidationReport": "Minimum required fields 145",
"countryName": "Afghanistan",
"adm0Code": 1,
"originalCsvFile": "https://localhost:44322/Surveys/ExportToCSV?surveyID=19"
},
...
}
所以字段 "originalCsvFile": "https://localhost:44322/Surveys/ExportToCSV?surveyID=19" 也应该包括版本号
从 Microsoft.AspNetCore.Mvc.Versioning
的 v3 开始,您可以获得注入到您的控制器方法中的版本信息:
[HttpGet]
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public ActionResult Get(ApiVersion version, int adm0Code = 0, int page = 1)
{
// version is available here
}
参见 Github 上的 docs。
我在 Asp.NET Core 3 WebApi 项目中添加了 WebAPI 的版本控制:
public void ConfigureServices(IServiceCollection services)
{
services.AddApiVersioning(
options =>
{
// reporting api versions will return the headers "api-supported-versions" and "api-deprecated-versions"
options.ReportApiVersions = true;
});
services.AddVersionedApiExplorer(
options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
...other configs...
}
所以现在我可以在我的控制器中添加版本:
[Route("[controller]")]
[ApiController]
public class SurveysController : ControllerBase
{
[HttpGet]
[ApiVersion("1.0")]
public ActionResult Get(int adm0Code = 0, int page = 1)
{
}
}
问题是,在 API 响应中,有时我还包括 link 到其他端点。 例如:
OriginalCsvFile = (s.SurveyStatusID==2) ? (baseUrl + "/Surveys/ExportToCSV?surveyID="+ s.SurveyID) : ""
在添加所需的版本控制后,它不再起作用。
我想在控制器的方法中检索用户请求的版本,以便我可以在 link 中包含我构建到其他端点。
我不能硬编码,因为我可能会遇到一种方法对多个版本有效的情况:
[HttpGet]
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public ActionResult Get(int adm0Code = 0, int page = 1)
{
}
JSON输出示例为:
{
"page": 1,
"items": [
{
"surveyID": 19,
"surveyStatusID": 2,
"surveyCreateDate": "2020-05-21T11:51:15.853",
"surveyStartDate": "2020-05-04T00:00:00",
"surveyEndDate": "2020-05-08T00:00:00",
"surveyValidationReport": "Minimum required fields 145",
"countryName": "Afghanistan",
"adm0Code": 1,
"originalCsvFile": "https://localhost:44322/Surveys/ExportToCSV?surveyID=19"
},
...
}
所以字段 "originalCsvFile": "https://localhost:44322/Surveys/ExportToCSV?surveyID=19" 也应该包括版本号
从 Microsoft.AspNetCore.Mvc.Versioning
的 v3 开始,您可以获得注入到您的控制器方法中的版本信息:
[HttpGet]
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public ActionResult Get(ApiVersion version, int adm0Code = 0, int page = 1)
{
// version is available here
}
参见 Github 上的 docs。