Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core Asp.net核心UrlHelper返回空值_Asp.net Core_Asp.net Mvc Routing_Asp.net Core Webapi - Fatal编程技术网

Asp.net core Asp.net核心UrlHelper返回空值

Asp.net core Asp.net核心UrlHelper返回空值,asp.net-core,asp.net-mvc-routing,asp.net-core-webapi,Asp.net Core,Asp.net Mvc Routing,Asp.net Core Webapi,我正在用asp.netcore 1.1构建一个简单的api,并尝试创建超媒体链接。我看过 还有一些相似的,但没有一个是有用的 我的控制器是 [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/organizers")] public class OrganizersController : Controller { [HttpGet, Route("{id:int}", Name = "get-organizers")]

我正在用asp.netcore 1.1构建一个简单的api,并尝试创建超媒体链接。我看过

还有一些相似的,但没有一个是有用的

我的控制器是

[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

请试试这个

使用
Url.Action

Url.Action("Get", "Organizers", new { id = 1 });
使用命名路由

Url.RouteUrl("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});
返回
/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 );
    }

操作参数不应该是“Get”而不是Routename吗?我没有对其进行版本控制。