首页 > 解决方案 > 使用带有前缀的属性路由控制器的 Url.Action 助手生成 url

问题描述

我已经定义了这样的地图路线:

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=User}/{action=Student}/{id?}");                   
        });

我有一个带有属性路由的 API 操作,如下所示:

[Route("api/User")]
public class UserApiController : Controller
{
    ....
    [HttpGet]
    [Route("Teacher")]
    public async Task<IEnumerable<UserApiVM>> GetTeachers()
    {
        ....
    }
 }

我可以访问浏览到像“ http://api/User/Teacher ”这样的直接网址。

现在我想使用@URL.Action 帮助器或任何其他帮助器生成该 url,但我不知道如何。我试过了

@Url.Action("Teacher","UserApi")

但它找不到控制器。

顺便说一句,控制器是控制器位于名为“Controllers”的文件夹中,而 API 控制器位于“Controllers”文件夹内的名为“API”的文件夹中。

谢谢!

标签: asp.net-mvcasp.net-core-mvcattributerouting

解决方案


对于生成api/User/Teacher,您需要指定GetTeachers为控制器名称而不是Teacher.

@Url.Action("GetTeachers", "UserApi")

如果你想通过指定生成 URL Teacher,你可以尝试如下设置路由名称:

    [HttpGet]
    [Route("Teacher",Name = "Teacher")]
    public async Task<IEnumerable<string>> GetTeachers()
    {
        return null;
    }

并通过以下方式生成 URL:

@Url.RouteUrl("Teacher")

推荐阅读