DynamicRouteValueTransformer 改变值没有任何影响
Posted
技术标签:
【中文标题】DynamicRouteValueTransformer 改变值没有任何影响【英文标题】:DynamicRouteValueTransformer changing values doesn't have any effects 【发布时间】:2020-05-10 17:15:22 【问题描述】:我正在尝试创建一个使用插件进行端点处理的 webapi
我有一个计算控制器
[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");
);
我实现了一些可以改变translationtransformer中的值的逻辑
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/calculate/房子
启动 TranslationTransformer 值[“控制器”]:“计算” values["action"] : "房子"
没有更改结果控制器被激活:OK
测试用例2
/api/demo/假的
启动 TranslationTransformer 值[“控制器”]:“演示” 值[“动作”]:“假”
no change result controller 没有被激活:OK
testcase3
/api/demo/假的
启动 TranslationTransformer 值[“控制器”]:“演示” 值[“动作”]:“假”
改变 值[“控制器”]:“计算” values["action"] : "房子"
结果控制器未激活:不好
测试用例 4
/api/calculate/房子
启动 TranslationTransformer 值[“控制器”]:“计算” values["action"] : "房子"
改变 值[“控制器”]:“演示” 值[“动作”]:“假”
结果控制器被激活:不行
我在这里错过了什么?
【问题讨论】:
【参考方案1】:我已经弄清楚缺少什么。
显然值并不是决定控制器选择的唯一元素。这在测试用例 4 中显示
所以你可以盲目地采用有效请求的值。
controller的value和action其实就是controller的名字和需要激活的方法。
在我的例子中,它是控制器:计算。但是作为操作,方法的名称必须是:Get
我仍然觉得有点令人费解,为什么将名称更改为有效请求的值不会导致相同的行为。
【讨论】:
以上是关于DynamicRouteValueTransformer 改变值没有任何影响的主要内容,如果未能解决你的问题,请参考以下文章