Я работаю над API. У меня есть «AbstractController.cs», и мне трудно вызвать GET с двумя параметрами.
[Route("api/[controller]")]
[ApiController]
public class AbstractController : ControllerBase
{
// GET: api/Abstract
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "missing implementation" };
}
Переход к https://localhost: 44363 / api / abstract / генерирует это. ["отсутствующая реализация"] Замечательно!
Теперь мне нужно создать метод Get, который проходит в год показа, и код для запроса SQL. Достаточно просто?
// GET: api/Abstract?ShowYear=2019&ShowCode=248621
[Route("api/{controller}/{ShowYear}/{ShowCode}")]
[HttpGet]
public Abstract Get(int ShowYear, int ShowCode) // GetAbstractByYearAndSHCode
{
string x = "";
return new Abstract();
}
Независимо от того, что я делаю, я не могу получить этот метод до точки останова / ввода выполнения! Я предполагаю, что это проблема маршрутизации, но я пробовал наиболее надежные способы вызова конечной точки.
Now I check the MS Documentation like any self-respecting-learning-programmer would.
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1
Endpoint маршрутизация в ASP. NET Core 3.0 и новее:
Не имеет концепции маршрутов. Не предоставляет гарантии упорядочивания для выполнения расширяемости, все конечные точки обрабатываются одновременно.
GULP Звучит страшно.
Я пока не касался своего промежуточного программного обеспечения.
Во всех рассмотренных мной примерах нет моих «MapControllers ();» в их Startup.cs. Это связано с тем, что он новичок в. NET Core 3.0 / 3.1 Метод: « Добавляет конечные точки для действий контроллера в IEndpointRouteBuilder без указания каких-либо маршрутов. »
Хорошо, у меня есть здесь еще вручную указать маршрут? Я сделал это, и это вроде как работает.
Ну, теперь точки останова в startup.cs, когда я go - https://localhost: 44363 / api / abstract / 2019/287
Wait, it's not doing ANYTHING with my controller code! Why?
The following (also above) code ends up declaring as a null in the startup.cs
var controller = context.Request.RouteValues["Abstract"];
Hoping to learn what I'm doing wrong.
MapGet("/api/abstract/{showYear}/{showCode}", ...);
Isn't this code responsible for mapping that route with the controller named AbstractController.cs in my Controllers folder? Not hitting any breakpoints.
Edit:
Reading through this which compares the differences in the Startup.cs from .Net Core 2, 2.2, MVC projects vs 3.0
I have a good feeling reading all of this, I will find the issue.
https://andrewlock.net/comparing-startup-between-the-asp-net-core-3-templates/ Редактировать ... nevermind не нашел разрешения.
Редактировать 2 :
Полное комментирование этого проблемного кода в startup.cs:
endpoints.MapGet("/api/abstract/{showYear}/{showCode}", async context =>
{
var controller = context.Request.RouteValues["Abstract"];
var showYear = context.Request.RouteValues["showYear"];
var showCode = context.Request.RouteValues["showCode"]; // just an example.
//await context.Response.WriteAsync($"Hello {showYear} is your year, {showCode} for the code!");
//GetAbstractByYearAndSHCode();
});
endpoints.MapGet("/api/abstract/{showYear}", async context =>
{
var name = context.Request.RouteValues["name"];
await context.Response.WriteAsync($"Hello {name}!");
});
Решает мою проблему невозможности доступа к контроллеру.
https://localhost:44363/api/abstract/2019 hits, and the id value is 2019. Great.
https://i.imgur.com/rmHyDPg.png результат выглядит великолепно.
Я все еще не могу использовать параметр> 1. Как мне просто использовать параметры Year и ShowCode? Какой синтаксис? https://localhost: 44363 / api / abstract / 2019