c# - 如何在 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 等效项。
解决方案
据我所知,如果你想重写所有从客户开始的请求。我建议您可以尝试以下规则:
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();
}
}
}
推荐阅读
- git - 在 git 上定义用户(在本地服务器上)并赋予他们不同的权限
- guava - 为什么在 Guava 的 BloomFilter 中实际误报的概率远低于预期的误报概率?
- java - Spring:如何在 Spring Boot 中动态创建类似的 bean?
- c# - 当我无权访问 HttpContext 时,如何填充我的审核日志 UserId 字段?
- python - 如何在自定义 Django Allauth 表单中设置密码字段的 help_text?
- terraform - terraform cloud - 已计划但未显示可应用的选项
- linker - 在调试部分周围添加符号会导致二进制文件的大小增加三倍
- php - 如何解决不存在的目标类?
- android - 弹出回栈会引发“已添加片段”异常
- siddhi - 是否可以在 WSO2SP 中生成和使用动态 URL?