问题描述
我想在我的.net核心项目中使用api版本,然后搜索网络并找到解决方案。 即使完全解决所有问题,但我也无法获得理想的结果。 因此,如果有什么可以帮助我的,请告诉我。 我在项目和..p中添加了Microsoft.AspNetCore.Mvc.Versioning 4.0.0程序包。
[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”并发送请求时,那是有效的。我很乐意帮助我..谢谢
解决方法
在您的代码中,我们发现您将[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);
}
测试结果
更新:
如果您想在控制器级别属性路由的路由模板中包含v{version:apiVersion}
,则可以尝试将[HttpGet("{SellerId}")]
应用于Info
操作方法并使用{{1}发出请求}。
https://localhost:5090/v1.0/seller/17