Как настроить .NET Core WEB API приложение, чтобы можно было получать конкретную модель GET запросом /api/server/{code} ?
Пытался воспользоваться аттрибутом Route
[Route("api/[controller]/{code}")]
[HttpGet]
public ActionResult GetServer(string code)
{
System.Console.WriteLine("code is: " + code);
return Json(WebSocketServers.FirstOrDefault(server => server.Code == code));
}
в итоге GET-запрос
localhost:5000/api/server/first отдаёт 404 ошибку
[Route("api/[controller]")]
public class ServerController : Controller
{
public ServerController(IOptions<WebSocketServerOptions> webSocketServerOptions)
{
WebSocketServers = webSocketServerOptions.Value.WebSocketServer.ToArray();
}
private WebSocketServer[] WebSocketServers { get; }
[HttpGet]
public ActionResult GetServers()
{
return Json(WebSocketServers);
}
// Хочу этот экшен с методом POST заменить на GET
[HttpPost]
public ActionResult GetServer([FromBody] WebSocketServer serverData)
{
return Json(WebSocketServers.FirstOrDefault(server => server.Code == serverData.Code));
}
}
public class WebSocketServer
{
public long Id { get; set; }
public string Address { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
Нашёл способ настройки Startup
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// остальной код метода
// добавление компонентов mvc и определение маршрута
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
//
/*app.UseMvc(routes =>
{
routes.MapRoute("api", "api/get", new { controller = "Home", action = "About" });
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});*/
}
Но неужели на каждый кастомный роут придётся его описывать в Startup.Configure ?
Допустим если нужно будет сделать еще для какого-нибудь контроллера такой же GET-запрос, но уже с параметром, например, {name} вместо {code}