我是asp.net的新手。我想使用asp.net创建一个Web服务。我使用this tutorial创建了一个项目。
我有这些课:
public class QRCodeItem
{
[Key]
public Byte Version { get; set; }
public int PrintPPI { get; set; }
public int CellSize { get; set; }
}
[Route("api/QRCode")]
[ApiController]
public class QRCodeController : ControllerBase
{
[HttpGet]
[Route("/CreateCode/{Version}/{PrintPPI}/{CellSize}")]
public async Task<ActionResult<IEnumerable<QRCodeItem>>> CreateCode(Byte Version = 1, int PrintPPI = 300, int CellSize = 5)
{
return await _context.QRCodeItems.ToListAsync();
}
[HttpGet]
public async Task<ActionResult<IEnumerable<QRCodeItem>>> GetQRCodeItems()
{
return await _context.QRCodeItems.ToListAsync();
}
}
我尝试使用以下网址访问
CreateCode
:https://localhost:44349/api/CreateCode?Version=1&PrintPPI=300&CellSize=2
但是我无法调用该方法。如何使用此URL调用
CreateCode
?我可以更改方法,但不能更改URL。网址正在使用:
https://localhost:44349/api/QRCode
调用方法
GetQRCodeItems
。 最佳答案
使用当前代码[Route("api/QRCode")]
是控制器中所有动作的基本路径。
方法的Route
属性中的值将连接到控制器的基本路由。
因此,对于[Route("CreateCode/{Version}/{PrintPPI}/{CellSize}")]
(请注意删除前导斜杠字符),完整的路由为:api/QRCode/CreateCode/{Version}/{PrintPPI}/{CellSize}
https://localhost:44349/api/QRCode/CreateCode/1/300/2
更改代码以匹配URL
只需将您的路线降至:[Route("CreateCode")]
之所以可行,是因为实际的URL路由以.../CreateCode
结尾而没有查询字符串。 ?
之后的参数将从查询字符串中选取。
额外
Microsoft Docs - Combining routes关于如何正确组合路线
应用于以/开头的动作的路径模板
结合应用于控制器的路由模板。这个例子
匹配类似于默认路由的一组URL路径
[Route("Home")]
public class HomeController : Controller
{
[Route("")] // Combines to define the route template "Home"
[Route("Index")] // Combines to define the route template "Home/Index"
[Route("/")] // Doesn't combine, defines the route template ""
public IActionResult Index()
{
ViewData["Message"] = "Home index";
var url = Url.Action("Index", "Home");
ViewData["Message"] = "Home index" + "var url = Url.Action; = " + url;
return View();
}
[Route("About")] // Combines to define the route template "Home/About"
public IActionResult About()
{
return View();
}
}