为什么在ASP.NET Core Controller中无法使用版本

问题描述

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

StartUp.cs

enter image description here

enter image description here

然后在我的控制器中添加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”方法发送请求:

enter image description here

但是那不起作用,并且得到404错误代码状态。.当我从URL中删除“ /v1.0”并发送请求时,那是有效的。我很乐意帮助我..谢谢

解决方法

在您的代码中,我们发现您将[HttpGet("/Sellers/{SellerId}")]应用于路由 模板从/Info动作方法开始,该方法不与应用于控制器的路由模板结合使用。要请求“信息”方法,可以使用下面的URL。

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);
}

测试结果

enter image description here

更新:

如果您想在控制器级别属性路由的路由模板中包含v{version:apiVersion},则可以尝试将[HttpGet("{SellerId}")]应用于Info操作方法并使用{{1}发出请求}。

https://localhost:5090/v1.0/seller/17