来自ProjectReference的控制器操作

时间:2017-10-23 20:23:46

标签: c# asp.net-core asp.net-core-2.0

我在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中的某些选项阻止它?

1 个答案:

答案 0 :(得分:0)

是。这是它的工作原理。收集所有可用组件的所有控制器,然后将其输入到路由框架中。如果您不希望引用该项目中的控制器,那么最简单和最合理的方法是不引用它们。将模型移到类库中,然后仅引用该类库,而不是完整的MVC项目,其中包括控制器和大量其他不一定要共享的东西。