【问题标题】:generate url with Url.Action helper from attribute routing controller with prefix使用带有前缀的属性路由控制器的 Url.Action 助手生成 url
【发布时间】:2018-10-06 19:09:26
【问题描述】:

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

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-mvc asp.net-core-mvc attributerouting


    【解决方案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")
    

    【讨论】:

      猜你喜欢
      • 2017-10-07
      • 2014-09-12
      • 2018-12-18
      • 2016-07-16
      • 2012-09-26
      • 1970-01-01
      • 2014-12-09
      • 2016-08-05
      • 1970-01-01
      相关资源
      最近更新 更多