【问题标题】:DynamicRouteValueTransformer changing values doesn't have any effectsDynamicRouteValueTransformer 改变值没有任何影响
【发布时间】: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"] : "房子"

改变 值[“控制器”]:“演示” 值[“动作”]:“假”

结果控制器被激活:不行

我在这里错过了什么?

【问题讨论】:

    标签: c# asp.net-core asp.net-core-routing


    【解决方案1】:

    我已经弄清楚缺少什么。

    显然值并不是决定控制器选择的唯一元素。这在测试用例 4 中显示

    所以你可以盲目地采用有效请求的值。

    controller的value和action其实就是controller的名字和需要激活的方法。

    在我的例子中,它是控制器:计算。但是作为操作,方法的名称必须是:Get

    我仍然觉得有点令人费解,为什么将名称更改为有效请求的值不会导致相同的行为。

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      相关资源
      最近更新 更多