首页 > 解决方案 > 如何在 Startup.cs 中指定对两个基本路径的支持

问题描述

我们正在关闭一个遗留 Web 服务,该服务有一个我们需要重定向到新 Web 服务的端点。旧端点位于,PUT /customer/{id}/email而新端点位于PUT /customer/{id}/email。根据我在此处其他地方找到的内容,我需要将以下内容添加到 Startup.cs 中的 Configure(..) 方法中:

    app.UsePathBase("/customers");

    var options = new RewriteOptions()
        .AddRewrite(@"(^customer/(.*)).+", @"customers\/$1", skipRemainingRules: true);
    app.UseRewriter(options);

如您所见,此服务的根路径是“/customers”,我们希望将特定请求从不同的根路径(“/customer”)重定向到新的“/customers”。这没有用。有一个更好的方法吗?我是否完全使用了错误的命令?注意:可以将所有 /customer 调用映射到它们的 /customers 等效项。

标签: c#asp.net-core

解决方案


据我所知,如果你想重写所有从客户开始的请求。我建议您可以尝试以下规则:

        app.UsePathBase("/customers");

        var options = new RewriteOptions()
            .AddRewrite(@"^customer/(.*)", @"customers/$1", true);
        app.UseRewriter(options);

注意:控制器名称是“CustomerController”,但我们使用 app.UsePathBase("/customers")。

namespace MyCompany.Customers.Customers
{
    [Authorize]
    [Route("")]
    [Produces("application/json")]
    [ApiController]
    public class CustomerController : ControllerBase
    {
        //  some code here...

        [HttpPost("email")]
        [ProducesResponseType(StatusCodes.Status202Accepted)]
        [ProducesResponseType(StatusCodes.Status400BadRequest)]
        public async Task<IActionResult> UpdateEmail([FromBody] UpdateEmail.Command command, CancellationToken cancellationToken)
        {
            await this.mediator.Send(command, cancellationToken);

            return this.Accepted();
        }

        [Route("{id:guid}/email")]
        [HttpPut]
        public async Task<IActionResult> UpdateEmail(Guid id, [FromBody] UpdateEmail.Command command, CancellationToken cancellationToken)
        {
            command.CustomerId = id;
            await this.mediator.Send(command, cancellationToken);

            return this.Accepted();
        }
    }
}

推荐阅读