1

我可以创建一个文件-> 新的 aspnetcore API 项目并使用它IUrlHelper按名称生成路由,而不会出现任何问题。

[Route("api/[controller]")]
public class ValuesController : Controller
{
    public const string GetValues = "GetValues";
    public const string GetValuesById = "GetValuesById";
    public static string[] Values = new[] { "value1", "value2", "value3", };

    // GET api/values
    [HttpGet(Name = GetValues)]
    public IEnumerable<object> Get()
    {
        var result = new List<object>();
        for(int index = 0; index < Values.Length - 1; index++)
        {
            string routeForElement = this.Url.RouteUrl(GetValuesById, new { Id = index });
            result.Add(new { Value = Values[index], Route = routeForElement });
        }

        return result;
    }

    // GET api/values/5
    [HttpGet("{id}", Name = GetValuesById)]
    public string Get(int id)
    {
        if (id > (Values.Length - 1))
        {
            return "Invalid Id";
        }

        return Values[id];
    }
}

当响应被发回时,我正确地拥有了我创建的路由:

 [
  {
    "value": "value1",
    "route": "/api/v1/Values/0"
  },
  {
    "value": "value2",
    "route": "/api/v1/Values/1"
  },
  {
    "value": "value3",
    "route": "/api/v1/Values/2"
  }
]

然后,我可以使用 Visual Studio Scaffolding 创建 Razor 页面并继续生成相同的路线,而不会在我的 Razor 页面中出现任何问题:

模型

public class IndexModel : PageModel
{
    public List<string> Routes { get; set; } = new List<string>();

    public void OnGet()
    {
        for (int index = 0; index < ValuesController.Values.Length; index++)
        {
            string routeForElement = this.Url.RouteUrl(ValuesController.GetValuesById, new { Id = index });
            Routes.Add(routeForElement);
        }
    }
}

@page
@model UrlHelperWithPages.Pages.IndexModel
@foreach(string route in Model.Routes)
{
    <h4>@route</h4>
}

这使得路线没有问题。

如果我添加aspnet-api-versioningnuget 包并配置它的服务:

services.AddApiVersioning();

我的 API 控制器继续使用以下修改。任何发往此控制器的请求都会正确生成路由。

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/[controller]")]
public class ValuesController : Controller

但是,当我们尝试从 Razor Pages 请求中生成路由时,Razor Pages 停止工作。该RouteUrl方法现在返回 null。我已经尝试更新提供给该RouteUrl方法的路线数据,以便我通过硬编码版本(用于测试)并且它也不起作用。

new { version = 1, Id = index }

是否需要在 api 版本控制包上进行任何配置以支持页面?我们有剃须刀页面,我们想要生成 API 路由以在页面中呈现,但它似乎不起作用。

4

0 回答 0