从带有前缀的属性路由控制器使用Url.Action帮助器生成url

时间:2018-10-06 19:09:26

标签: asp.net-mvc asp.net-core-mvc attributerouting

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

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在“ Controllers”文件夹中,API controllers在“ Controllers”文件夹中名为“ API”的文件夹中。

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

并通过以下方式生成URL:

@Url.RouteUrl("Teacher")