【问题标题】:Generating link using urlhelper in MVC 6 controller (vNext)在 MVC 6 控制器 (vNext) 中使用 urlhelper 生成链接
【发布时间】:2015-08-05 01:23:25
【问题描述】:

我正在尝试学习新的 MVC 6。我以前从未使用过 Microsoft MVC 框架。 我正在尝试通过使用控制器的 URL (urlhelper) 添加指向我的控制器的不同操作的链接来增强简单的教程 Web API(Home 控制器显示 API 可以做什么)。 但是当我使用时:

this.Url.Action("Get", new {id = id});

我得到一个带有 URL 的查询字符串。我想要一个更宁静的网址。

我认为在使用属性路由时,我不必像在 WebApi 的旧教程中看到的那样映射特定的路由。

我必须绘制路线吗? 我必须做些什么才能获得更宁静的 URL 样式?

【问题讨论】:

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


    【解决方案1】:

    您可以在控制器中为路由属性添加名称,然后使用扩展方法IUrlHelper.RouteUrl 生成url。

    例如,给定以下 web api 控制器:

    [Route("api/[controller]")]
    public class UsersController : Controller
    {
        // GET: api/users
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }
    
        // GET api/users/5
        [HttpGet("{id}", Name ="UsersGet")]
        public string Get(int id)
        {
            return "value";
        }
    
        //additional methods...
    }
    

    您可以使用 @Url.RouteUrl("UsersGet", new { id = 123 }) 为特定的 get by id 操作生成 url api/users/123

    使用Url.Action 扩展方法时的问题是,如果您有一个像上面示例中的控制器,带有两个名为“Get”的动作,这将使用不带参数的动作路由并生成/api/Users?id=123。但是,如果您评论该方法,您会看到 @Url.Action("Get", "Users", new { id = 123 }) 也会为您提供预期的 url。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2013-06-28
      相关资源
      最近更新 更多