Статические файлы и oData - PullRequest
1 голос
/ 27 марта 2019

У нас есть комбо asp.чистые основные данные в качестве фонового и угловые 6 в качестве внешнего.Оба разрабатываются отдельно, при каждом выпуске Angular файлы копируются в папку wwwroot .Мы добавили эти два метода в Startup.Configure, чтобы разрешить чтение статических файлов:

app.UseDefaultFiles();
app.UseStaticFiles();

index.html , однако, получает удар, когда Angular ссылается на свои файлы js в app-rootВ элементе (например, runtime.js или polyfils.js ) мы получаем ошибку 500:

Произошло необработанное исключение при обработке запроса.AmbiguousActionException: несколько действий совпадают.Следующие действия соответствуют данным маршрута и были все ограничения удовлетворены: SomeNamespace.API.Controllers.ProductRequestController.GetProductRequest (SomeNamespace.API) SomeNamespace.API.Controllers.UserProfileController.GetUserProfile (SomeNamespace.API) SomeNamespace.API.Controllers.UserRoleCategoryController.GetUserRoleCategory (SomeNamespace.API) SomeNamespace.API.Controllers.WorkflowStepController.GetWorkflowStep (SomeNamespace.API) Microsoft.AspNetCore.Mvc.Internal.ActionSelector.SelectBestCandidate (контекст RouteContext * * *1011* 1017) даже 1019 кандидатов, даже 1017 кандидатов.html получает удар по другому.Сетевое ядро ​​имеет проблемы с обслуживанием других файловМы также установили правильный (мы думаем) базовый путь в заголовке:

<base href="~/">

Похоже, что вместо простого обслуживания файлового приложения приложение на самом деле пытается найти подходящий контроллер (в данном случае odata).У кого-нибудь есть опыт, что происходит и что не так?

1 Ответ

1 голос
/ 27 марта 2019

ОК, поэтому после некоторого дополнительного поиска в Google и отчаянной игры мы получили рабочее решение.Итак, две вещи:

  1. Пришлось добавить дополнительную маршрутизацию вместе с оддой один
  2. , и это безумие!Два метода для поддержки статических файлов ДОЛЖНЫ быть вызваны перед маршрутизацией.

В итоге это выглядит так:

app.UseDefaultFiles();
app.UseStaticFiles();

app.UseHttpsRedirection();
app.UseMvc(routeBuilder =>
   {
      routeBuilder.MapODataServiceRoute("ODataRoutes", "odata", modelBuilder.GetEdmModel(app.ApplicationServices));
      routeBuilder.MapRoute(
         name: "angular", 
         template: "{*url}",
         defaults: new {controller = "Home", action = "Index"});
    });

Я не думаю, что это нормально, по крайней мереэто должно быть упомянуто в документации где-то.Похоже, что в ядре asp.net вы действительно можете влиять на поведение приложения просто с неправильным порядком вызова методов.Может быть, это где-то обсуждалось?

...