2017-02-09 48 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});