2017-02-09 49 views
0

我建立一個簡單的API與asp.netcore 1.1並試圖創建超媒體鏈接。我已經看過Asp.net核心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,版本等。不過,我得到空的兩個網址。

+0

不應該動作參數是「Get」而不是Routename? – 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,這看起來更REST風格。

你不應該得到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});