У меня есть Core 2.2 API с кучей существующих контроллеров.То, что я сейчас пытаюсь сделать, это добавить новый контроллер, который действует аналогично универсальному маршруту, но только для этого контроллера (и не нарушает маршруты существующих контроллеров) .
В моем существующем контроллере я определяю маршруты как атрибуты контроллера
[Route("api/[controller]")]
[ApiController]
public class SandboxController : ControllerBase
{
[HttpGet("Hello")]
public IEnumerable<string> Hello()
{
return new string[] { "Hello World", TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")).ToString()};
}
}
Для этого нового контроллера "catchall" мне нужно, чтобы он мог перехватывать любые Get, Post, Put, Delete, которые естьнаправлено на это .Например, этот маршрут контроллеров ../api/catchall.Если кто-то, где сделать сообщение в ../api/catchall/some/random/unknown/route, я пытаюсь поймать это и направить его в ../api/catchall/post.
До сих пор я был совершенно неудачен.Вот что я получил до сих пор:
В моем файле Startup.cs
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
...
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Sandbox}/{action=Hello}/{id?}");
routes.MapRoute(
name: "catchall",
template: "{controller}/{*.}",
defaults: new { controller = "catchall", action = "post" });
});
И контроллер перехвата:
[Route("api/[controller]")]
[ApiController]
public class CatchallController : ControllerBase
{
[HttpPost("post", Order = int.MaxValue)]
public IActionResult Post([FromBody] string value)
{
return Content("{ \"name\":\"John Doe\", \"age\":31, \"city\":\"New York\" }", "application/json");
}
}
Любые идеи о том, как я могу получить этоработать?