我在csproj文件中使用ProjectReference指向另一个Asp Core项目,以便从那里重用模型。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<UserSecretsId>HIDDEN</UserSecretsId>
<PreserveCompilationContext>true</PreserveCompilationContext>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\Project1\Project1.csproj" />
</ItemGroup>
...
</Project>
但这会导致第一个项目中的控制器操作在第二个项目中可用。似乎configure方法中的app.UseMvc找到第一个项目中的所有控制器。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
此外,如果我在两个项目中都有相同的控制器名称,则会出现以下错误:
AmbiguousActionException:匹配多个动作。以下操作匹配路由数据并满足所有约束:
在引用控制器操作时,有没有办法阻止第一个项目的控制器操作?或者使用UseMvc中的某些选项阻止它?
答案 0 :(得分:0)
是。这是它的工作原理。收集所有可用组件的所有控制器,然后将其输入到路由框架中。如果您不希望引用该项目中的控制器,那么最简单和最合理的方法是不引用它们。将模型移到类库中,然后仅引用该类库,而不是完整的MVC项目,其中包括控制器和大量其他不一定要共享的东西。