ASP. Net Исключение при запуске приложения Core 3.0 «В шаблоне маршрута есть неполный параметр» - PullRequest
0 голосов
/ 15 января 2020

У меня действительно запутанная проблема, главным образом потому, что я получаю исключение, которое очень бесполезно и не описывает.

У меня есть ASP. Net API на основе ядра, и я просто добавлен новый контроллер. Я использую ASP. Net Core 3.0 и сопоставляю свои контроллеры с помощью Startup.Configure, используя следующее:

app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

Однако при запуске API в отладке При запуске я получил следующее исключение:

RoutePatternException: в шаблоне маршрута есть неполный параметр. Убедитесь, что каждый символ «{» имеет соответствующий символ «}».

Я удалил контроллер, и проблема исчезла, поэтому я считаю, что с контроллером что-то не так, что вызывает сопоставление конечной точки бросить это исключение, но я не вижу, что это такое?

1 Ответ

0 голосов
/ 15 января 2020

Только когда я переконфигурировал способ маршрутизации конечных точек, я нашел ответ на проблему. Я написал это на тот случай, если кто-нибудь еще получит какие-то неописательные исключения из ASP. Net Core. В Startup.Configure я заменил:

app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

на:

app.UseMvc(routes =>
{
    routes.MapRoute("repo1", "{controller=Repo1Controller}");
    routes.MapRoute("repo2", "{controller=Repo2Controller}");
}

Затем в Startup.ConfigureServices я добавил:

services.AddMvc(option => option.EnableEndpointRouting = false);

При следующем запуске это показало следующее исключение:

RouteCreationException: Следующие ошибки произошли с информацией о маршрутизации атрибута: Для действия: 'MyAPI.Controllers.Repo2Controller .UpdateEntityProperty (MyAPI) '

Ошибка: в шаблоне маршрута есть неполный параметр. Убедитесь, что каждый символ «{» имеет соответствующий символ «}». (Параметр 'routeTemplate')

В Repo2Controller у меня было следующее:

[HttpPut("{entityId}/Properties/{propertyId")]
public IActionResult UpdateEntityProperty(string entityId, string propertyId)
{
    // Do some stuff
}

Это высветило тот факт, что я пропустил закрытие } в атрибуте HttpPut. Как только я заменил это и вернулся к исходному методу маршрутизации конечной точки, все работало нормально.

...