首页 > 解决方案 > 为什么asp.net核心控制器中的版本不起作用

问题描述

我想在我的 .net 核心项目中使用 api 版本。然后搜索网络并找到解决方案。即使做了所有的解决方案,但我无法得到想要的结果。因此,如果有人可以帮助我,请告诉我.. 我在我的项目中添加 Microsoft.AspNetCore.Mvc.Versioning 4.0.0 包和..

启动.cs 在此处输入图像描述

在此处输入图像描述

然后在我的控制器中添加 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”并发送请求时,这是有效的。我很乐意帮助我.. 谢谢

标签: asp.net-coreroutesversion

解决方案


在您的代码中,我们可以发现您应用的路由模板以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}")]Infoaction 方法并使用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)
    {
        //...

推荐阅读