asp.net CreatedAtRoute -没有与提供的值匹配的路由,(传递父/子值)

0sgqnhkj  于 9个月前  发布在  .NET
关注(0)|答案(1)|浏览(109)

首先,我在这里搜索了类似的情况,但还没有找到。
我正在尝试创建一个公司(子),它有一个租户(父),并在响应中返回URI值。

API控制器路由设置

[ApiController]
[Route("api/tenants/{tenantId}/companies")]
public class CompanyController : ControllerBase

GetCompanyById设置

[HttpGet("{companyId:guid}")]
[ActionName(nameof(GetCompany))]
public async Task<IActionResult> GetCompany(Guid tenantId, Guid companyId)
{
    var result = await _sender.Send(new GetCompanyQuery(tenantId, companyId));

    return Ok(result);
}

创建方法

[HttpPost]
public async Task<IActionResult> CreateCompany(Guid tenantId, CreateCompanyRequest request)
{
    var company = new CreateCompanyCommand(
        request.Name,
        request.NavraeName,
        request.NavraeStoreNo,
        request.AddressStreet,
        request.AddressUnit,
        request.AddressCity,
        request.AddressState,
        request.AddressZip,
        request.Phone,
        request.Email,
        tenantId);

    var result = await _sender.Send(company);

    if (result.IsFailure)
        return BadRequest(result.Error);

    return CreatedAtRoute(
        routeName: nameof(GetCompany),
        routeValues: new {tenantId, companyId = result.Value}, 
        value: result);
}

我尝试使用CreatedAtAction,但得到以下错误:

qoefvg9y

qoefvg9y1#

我没有复制你的问题,但我有一个测试与下面的代码,它工作得很好。

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WebApi.Controllers
{
    [Route("api/tenants/{tenantId}/companies")]
    [ApiController]
    public class CompanyController : ControllerBase
    {
        [HttpGet("{companyId:guid}", Name = "GetCompany")]
        //[ActionName(nameof(GetCompany))]
        public async Task<IActionResult> GetCompany(Guid tenantId, Guid companyId)
        {
            return Ok();
        }
        [HttpPost]
        public async Task<IActionResult> CreateCompany(Guid tenantId)//, CreateCompanyRequest request
        {
            return CreatedAtRoute(
                routeName: nameof(GetCompany),
                routeValues: new { tenantId, companyId = Guid.NewGuid() },
                value: null);
        }
    }
}

如果我用

[HttpGet("{companyId:guid}")]
[ActionName(nameof(GetCompany))]

我会得到500个错误。

相关问题