我们有一个asp组合。网络核心odata作为后端,而Angular 6作为前端。两者都是分别开发的,在每个发行版中,Angular文件都将复制到 wwwroot 文件夹中。我们在Startup.Configure中添加了这两种方法,以允许读取静态文件:
app.UseDefaultFiles();
app.UseStaticFiles();
index.html 受到打击,但是当Angular引用 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上下文,IReadOnlyList候选对象)
似乎index.html也被其他ASP击中。网络核心有服务其他文件的问题。我们还在头部设置了正确的(我们认为)基本路径:
<base href="~/">
看起来实际上不是在简单地提供文件应用程序,而是试图找到合适的控制器(在这种情况下为odata)。有没有人经历过正在发生的事情和出了什么问题?
答案 0 :(得分:1)
好的,所以经过一些额外的谷歌搜索和拼命玩耍之后,我们得到了可行的解决方案。有两件事:
所以最终看起来像这样:
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核心中,您实际上可以通过错误的方法调用顺序来影响应用程序的行为。也许这是在某个地方讨论的?