Asp.net 核心 UrlHelper 返回空值
Asp.net core UrlHelper returning nulls
我正在使用 asp.netcore 1.1 构建一个简单的 api 并尝试创建超媒体链接。我看过
WebAPI Url.Link() returning NULL
和一些类似的,但其中 none 有帮助。
我的控制器是
[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 都为空。
您可以通过多种方式生成 url,see here for the full documentation
请试试这个
和Url.Action
Url.Action("Get", "Organizers", new { id = 1 });
使用命名路线
Url.RouteUrl("get-organizers", new {id = 1});
我试过你的例子
Url.Link("default", new {id=2});
returns http://localhost:1237/api/v1.0/Organizers/Get/1
和
Url.RouteUrl("default", new {controller = "Organizers", action = "get-organizers", id = 1});
returns/api/v1.0/Organizers/get-organizers/1
,虽然get-organizers
动作没有定义,但它是一个路由名称。
然而,
Url.Action("Get", new { id = id });
// or
Url.RouteUrl("get-organizers", new { id = id });
returns/api/v1.0/organizers/1
,看起来更RESTful.
您不应该得到 NULL
值。确保您已启用 API 版本控制。
public void ConfigureServices( IServiceCollection services )
{
services.AddMvc();
services.AddApiVersioning( o => o.ReportApiVersions = true );
}
我正在使用 asp.netcore 1.1 构建一个简单的 api 并尝试创建超媒体链接。我看过
WebAPI Url.Link() returning NULL
和一些类似的,但其中 none 有帮助。
我的控制器是
[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 都为空。
您可以通过多种方式生成 url,see here for the full documentation
请试试这个
和Url.Action
Url.Action("Get", "Organizers", new { id = 1 });
使用命名路线
Url.RouteUrl("get-organizers", new {id = 1});
我试过你的例子
Url.Link("default", new {id=2});
returns http://localhost:1237/api/v1.0/Organizers/Get/1
和
Url.RouteUrl("default", new {controller = "Organizers", action = "get-organizers", id = 1});
returns/api/v1.0/Organizers/get-organizers/1
,虽然get-organizers
动作没有定义,但它是一个路由名称。
然而,
Url.Action("Get", new { id = id });
// or
Url.RouteUrl("get-organizers", new { id = id });
returns/api/v1.0/organizers/1
,看起来更RESTful.
您不应该得到 NULL
值。确保您已启用 API 版本控制。
public void ConfigureServices( IServiceCollection services )
{
services.AddMvc();
services.AddApiVersioning( o => o.ReportApiVersions = true );
}