Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.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
C# CreateDataAction不考虑.Net Core 3.0中控制器中设置的路由模板_C#_Asp.net_.net_Asp.net Core_.net Core - Fatal编程技术网

C# CreateDataAction不考虑.Net Core 3.0中控制器中设置的路由模板

C# CreateDataAction不考虑.Net Core 3.0中控制器中设置的路由模板,c#,asp.net,.net,asp.net-core,.net-core,C#,Asp.net,.net,Asp.net Core,.net Core,我正在构建一个restful api,当适当的端点被命中时,它将返回创建的201。为了做到这一点,我尝试使用createDataAction和CreatedAtRoute方法,但它们都不遵守在控制器顶部(或操作顶部)定义的路由,而是使用startup.cs中存在的默认路由。如果我在控制器顶部命名路由,并使用CreatedAtRoute,它将部分尊重路由,但它将id字段作为查询字符串参数传递,而不是将其作为路由的一部分使用(如操作指定的) [ApiVersion(“1.0”)] [路由(“api/

我正在构建一个restful api,当适当的端点被命中时,它将返回创建的
201
。为了做到这一点,我尝试使用
createDataAction
CreatedAtRoute
方法,但它们都不遵守在控制器顶部(或操作顶部)定义的路由,而是使用
startup.cs
中存在的
默认
路由。如果我在控制器顶部命名路由,并使用
CreatedAtRoute
,它将部分尊重路由,但它将
id
字段作为查询字符串参数传递,而不是将其作为路由的一部分使用(如操作指定的)

[ApiVersion(“1.0”)]
[路由(“api/v{version:apiVersion}/[controller]”,Name=“Organizations”)]
公共类组织控制器:BaseController
{
[HttpGet(“{id}”,Name=“GetOrganization”)]
公共异步任务组织(字符串id)
{
var命令=新的GetOrganizationQuery(id);
返回Ok(等待Mediator.Send(命令));
}
[HttpPost]
[产品响应类型(StatusCodes.Status201Created)]
公共异步任务CreateOrganization(CreateOrganizationCommand)
{
var organization=wait Mediator.Send(命令);
返回CreateDataAction(“GetOrganization”、“Organizations”,
新的{id=organization.id},组织);
}  
}

如果我使用:

返回CreateDataAction(“GetOrganization”,“Organizations”,新的{id=organization.id},organization);
//或
返回CreateDataAction(“GetOrganization”,新的{id=organization.id},organization);
位置标题为
位置:https://localhost:5001/Organizations/GetOrganization/08d76ebb-95a9-ec4c-7bea-dbb5ff20cf06


如果我使用:

返回CreatedAtRoute(“GetOrganization”,新的{id=organization.id},organization);
我收到一个错误,
没有与提供的值匹配的路由。


如果我使用:

返回CreatedAtRoute(“组织”,新的{id=organization.id},组织);
我非常接近,但ID作为查询字符串添加,如下所示:
location:https://localhost:5001/api/v1/Organizations?id=08d76ebc-4b79-d9bf-32e9-3cf4202ebce7

如果我试图使ID成为控制器上的可选参数,它会附加到控制器内的所有操作,这也是不可行的解决方案


将位置设置为正确路线的正确方法是什么?

因此,错误的根源实际上是路线中存在的
ApiVersion
。即使将应用程序设置为在未指定时将
AssumeDefaultVersion设置为true,该值似乎不会影响内部路由。为了让应用程序选择正确的路由,我必须在
createDataAction
方法中指定api版本,如下所示:

[ApiVersion(“1.0”)]
[路由(“api/v{version:apiVersion}/[控制器]”)
公共类组织控制器:BaseController
{
[HttpGet(“{id}”)]
公共异步任务组织(字符串id)
{
var命令=新的GetOrganizationQuery(id);
返回Ok(等待Mediator.Send(命令));
}
[HttpPost]
[产品响应类型(StatusCodes.Status201Created)]
公共异步任务CreateOrganization(CreateOrganizationCommand命令,ApiVersion版本)
{
var organization=wait Mediator.Send(命令);
返回CreateDataAction(nameof(GetOrganization),
新的{id=organization.id,version=version.ToString()},
组织);
}  
}
你可以看到更多