0

asp.netcore 1.1で単純なAPIを構築し、ハイパーメディアリンクを作成しようとしています。私はAsp.netコアのUrlHelperがnullを返す

WebAPI Url.Link() returning NULL

とsimilarsのカップルを見てきましたが、それらのどれも助けませんでした。

私のコントローラは

[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 }); 
      (...) 
     } 
     (...) 

    } 

私のスタートアップが、私はまだ、私はnullを取得取り除く働き、API、バージョンなどを含む可能なパラメータの多くの順列を試してみました

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()); 
    } 

のように見えています両方のURL。

+0

アクションパラメータは、ルート名の代わりに「取得」しないでください。 – JOSEFtw

答えて

1

Url.Action("Get", "Organizers", new { id = 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}); 

戻りget-organizersアクションが定義されていない場合であっても/api/v1.0/Organizers/get-organizers/1、それはルート名です。

しかし、

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

は、より多くのRESTfulな見えた、/api/v1.0/organizers/1を返します。

NULL値を取得しないでください。 APIのバージョン管理が有効になっていることを確認してください。

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

私はバージョン管理をしていませんでした。 – sergio

関連する問題