asp.net-core - 为什么asp.net核心控制器中的版本不起作用
问题描述
我想在我的 .net 核心项目中使用 api 版本。然后搜索网络并找到解决方案。即使做了所有的解决方案,但我无法得到想要的结果。因此,如果有人可以帮助我,请告诉我.. 我在我的项目中添加 Microsoft.AspNetCore.Mvc.Versioning 4.0.0 包和..
然后在我的控制器中添加 Rout 属性,如图所示:
[ApiController]
[Authorize]
[Route("v{version:apiVersion}/[Controller]")]
[ApiVersion("1.0")]
public class SellerController : Controller
{
private readonly IBus _client;
private readonly string AppBaseUrl = MyHttpContext.AppBaseUrl;
//private readonly IGetUrl _globalUrl;
public SellerController(IBus client/*, IGetUrl globalUrl*/)
{
_client = client;
//_globalUrl = globalUrl;
}
[HttpGet("/Sellers/{SellerId}")] // Dashboard
public async Task<IActionResult> Info(long SellerId)
{
...
}
}
有了这些代码,我希望我可以通过这个 url 向 'Info' 方法发送请求:
但这不起作用并获得 404 错误代码状态.. 当我从 url 中删除“/v1.0”并发送请求时,这是有效的。我很乐意帮助我.. 谢谢
解决方案
在您的代码中,我们可以发现您应用的路由模板以to action 方法[HttpGet("/Sellers/{SellerId}")]
开头,它没有与应用于控制器的路由模板结合。要向“信息”方法发出请求,您可以使用以下 URL。/
Info
https://localhost:5090/sellers/17
我希望我可以通过这个 url 向“Info”方法发送请求:https://localhost:5090/v1.0/sellers/17
为了达到您的要求,您可以尝试修改如下代码。
[HttpGet("/v{version:apiVersion}/Sellers/{SellerId}")]
public async Task<IActionResult> Info(long SellerId)
{
//...
//for testing purpose
return Ok(SellerId);
}
测试结果
更新:
如果您想包含v{version:apiVersion}
在控制器级属性路由的路由模板中,您可以尝试应用[HttpGet("{SellerId}")]
到Info
action 方法并使用https://localhost:5090/v1.0/seller/17
.
[ApiController]
[Authorize]
[Route("v{version:apiVersion}/[Controller]")]
[ApiVersion("1.0")]
public class SellerController : Controller
{
[HttpGet("{SellerId}")] // Dashboard
public async Task<IActionResult> Info(long SellerId)
{
//...
推荐阅读
- javascript - 如何更改打字稿中的“this”指针
- spring-boot - Spring Boot 自定义用户配置文件 url
- arrays - C calloc 和 vla
- java - 使用自定义遥测修复端到端跟踪
- http - 将文件上传转发到其他服务器
- discord - 我想让每个点击我的 Discord oauth 链接的人都被放入服务器
- reactjs - ReactJS 可以在 Symfony 5.3 中使用他们的 Webpack Encore Bundle 在没有节点的情况下运行吗
- reactjs - 如何有条件地禁用输入取决于“React-hook-form”中的另一个输入值?
- java - 使用preparedStatement执行查询时出错
- c++ - C++ (a) 静态和 (b) 动态库链接的 Visual Studio Code 设置