我正在尝试创建一个使用插件进行端点处理的 webapi
我有一个计算 Controller
[Route("api/[controller]")]
public class CalculateController : Controller
{
[HttpGet("{functionName}")]
public IActionResult Get(string functionName)
{
/// some logic here
}
}
这应该响应/api/calculate/house
我已经在启动中添加了一个 TranslationTransformer,并且我看到它已被激活
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//hidden for abbreviate
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapDynamicControllerRoute<TranslationTransformer>("api/{controller}/{**action}");
});
}
我实现了一些可以改变翻译转换器中的值的逻辑
public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
{
RouteConfig dynamicRoute = GetDynamicRoute(values);
if (dynamicRoute != null)
{
values["controller"] = dynamicRoute.Controller;
values["action"] = dynamicRoute.Action;
}
return values;
}
测试结果:
测试用例 1
/api/计算/房子
启动翻译转换器 值[“ Controller ”]:“计算” 值[“行动”]:“房子”
没有更改结果 Controller 被激活:确定
测试用例2
/api/demo/fake
启动翻译转换器 值[“ Controller ”]:“演示” 值[“action”]:“假”
无更改结果 Controller 未激活:确定
测试用例3
/api/demo/fake
启动翻译转换器 值[“ Controller ”]:“演示” 值[“action”]:“假”
改变 值[“ Controller ”]:“计算” 值[“行动”]:“房子”
结果 Controller 未激活:不正常
测试用例 4
/api/计算/房子
启动翻译转换器 值[“ Controller ”]:“计算” 值[“行动”]:“房子”
改变 值[“ Controller ”]:“演示” 值[“action”]:“假”
结果 Controller 被激活:不正常
我在这里缺少什么?
最佳答案
我已经弄清楚缺少什么了。
显然,值并不是决定 Controller 选择的唯一元素。这在测试用例 4 中得到了展示
所以你可以盲目地采用有效请求的值。
Controller 和操作的值实际上是 Controller 的名称和需要激活的方法。
就我而言,它是 Controller :计算。但作为操作,方法的名称必须是:Get
我仍然觉得有点令人困惑,为什么将名称更改为有效请求的值不会导致相同的行为。
关于c# - DynamicRouteValueTransformer 更改值不会产生任何影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59895395/