【问题标题】:Asp.net core UrlHelper returning nullsAsp.net 核心 UrlHelper 返回空值
【发布时间】:2017-02-09 13:18:15
【问题描述】:

我正在使用 asp.netcore 1.1 构建一个简单的 api,并尝试创建超媒体链接。我看过了

WebAPI Url.Link() returning NULL

还有一些类似的,但没有一个有帮助。

我的控制器是

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/organizers")]
public class OrganizersController : Controller
{
    [HttpGet, Route("{id:int}", Name = "get-organizers")]
    public IActionResult Get(int id)
    {
        try
        {
            var uri = Url.Link("default", new {id=2});
            var uri2 = Url.RouteUrl("default", new { controller = "Organizers", action = "get-organizers", id = 1 });
            (...)
        }
        (...)

     }

我的创业公司看起来像

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IApplicationLifetime appLifetime)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        //serilog
        loggerFactory.AddSerilog();

        app.UseMvc(opt=>opt.MapRoute("default", "api/v{version:apiVersion}/{controller}/{action}/{id:int?}"));
        appLifetime.ApplicationStopped.Register(() => ApplicationContainer.Dispose());
    }

我已经尝试了许多可能的参数排列,包括删除操作、api、版本等。仍然,两个 url 都为 null。

【问题讨论】:

  • action参数不应该是“Get”而不是Routename吗?

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


【解决方案1】:

我已经尝试过你的示例,并且

Url.Link("default", new {id=2});

返回http://localhost:1237/api/v1.0/Organizers/Get/1

Url.RouteUrl("default", new {controller = "Organizers", action = "get-organizers", id = 1});

返回/api/v1.0/Organizers/get-organizers/1,即使get-organizers动作没有定义,它也是一个路由名称。

然而,

Url.Action("Get", new { id = id });
// or
Url.RouteUrl("get-organizers", new { id = id });

返回/api/v1.0/organizers/1,看起来更RESTful。

你不应该得到NULL 值。确保您已启用 API 版本控制。

    public void ConfigureServices( IServiceCollection services )
    {
        services.AddMvc();
        services.AddApiVersioning( o => o.ReportApiVersions = true );
    }

【讨论】:

  • 我没有开启版本控制。
【解决方案2】:

您可以通过多种方式生成网址,see here for the full documentation

请试试这个

Url.Action

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

使用命名路线

Url.RouteUrl("get-organizers", new {id = 1});

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多