【问题标题】:Asp.Net Core Url.Action use WebApi ControllerAsp.Net Core Url.Action 使用 WebApi Controller
【发布时间】:2019-07-11 01:40:01
【问题描述】:

我的应用程序中有两种类型的控制器。一个 WebApi 控制器和一个 MVC 控制器。我的项目结构如下:

Project
|-- Controllers
|   |-- Api
|   |   |-- AccountController
|   |   |-- ...
|   |-- AccountController
|   |-- ...

如您所见,我在两个不同的命名空间中有两次 AccountController。文件夹 Api 中的一个是 WebApi 控制器,Controllers 下的一个是 MVC 控制器。

我想在我的视图中使用@Url.Action("GetAll", "Account") 来生成指向我的WebApi 控制器的链接。如何区分 Api 控制器和 MVC 控制器。如何判断是使用 Api 还是 MVC 控制器?

【问题讨论】:

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


    【解决方案1】:

    一句话:你不能。 Url.Action 无法通过命名空间进行区分;您需要唯一的控制器名称。这就是为什么通常在 API 控制器的名称中添加 Api 的部分原因,即 AccountControllerAccountApiController

    如果你真的想同时使用AccountController,你唯一真正的选择是使用区域。您可以创建一个Api 区域,而不仅仅是Controllers 下的子文件夹,然后您可以这样做:

    @Url.Action("GetAll", "Account", new { area = "Api" })
    

    【讨论】:

    • 非常感谢克里斯的回复!我看到只有当我调用的动作在两个控制器中都是唯一的时它才能区分。但是,当在两个控制器中指定相同的操作时,适当控制器的选择是一种随机的。我想我将不得不在我的控制器名称中添加 Api 关键字。
    猜你喜欢
    • 2017-04-04
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2019-11-02
    • 2017-11-02
    • 2018-09-28
    • 1970-01-01
    相关资源
    最近更新 更多