@qwead

Добавление кастомного роута?

Как настроить .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}
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
Тут подробно объяснено
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы