2017-02-09 17 views
0

Im создает простой api с asp.netcore 1.1 и пытается создать гипермедиа ссылки. Я посмотрел наAsp.net core UrlHelper возвращает нули

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.

+0

Не должен ли параметр действия быть «Get» вместо имени маршрута? – JOSEFtw

ответ

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); 
    } 
+0

Я не имел версии на. – sergio

0

Вы можете создать URL в несколько способов, see here for the full documentation

Пожалуйста, попробуйте это

С Url.Action

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

С именем маршрута

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

 Смежные вопросы

  • Нет связанных вопросов^_^