gpt4 book ai didi

c# - HttpRequest.RouteValues属性不可从代码访问,但可从调试器访问

转载 作者:行者123 更新时间:2023-12-03 17:08:26 25 4
gpt4 key购买 nike

我正在尝试创建对特定请求执行某些检查的中间件。

例如,我有这样的路线:

  • api/Test/{paramToCheck}/aaa
  • api/Test/bbb/ccc

  • 我有这些要求:
  • http://some-host-and-port/api/Test/1234/aaa
  • http://some-host-and-port/api/Test/bbb/ccc

  • 现在在我的中间件内部,我想检查请求是否包含 {paramToCheck}并获取此参数的值。

    当我在 InvokeAsync中设置断点时,我可以看到 httpContext.Request.RouteValues属性包含所有需要的数据( Keys包含 "paramToCheck",而 Values包含其值)。

    但是在代码中我无法访问此属性,但出现错误:

    Error CS1061: 'HttpRequest' does not contain a definition for 'RouteValues' and no accessible extension method 'RouteValues' accepting a first argument of type 'HttpRequest' could be found (are you missing a using directive or an assembly reference?)


    var value = httpContext.Request.RouteValues["paramToCheck"];
    如何访问此属性或如何执行所需的检查?

    代码:
    public class MyMiddleware
    {
    private readonly RequestDelegate _next;

    public MyMiddleware
    (
    RequestDelegate next
    ) => this._next = next;

    public async Task InvokeAsync(HttpContext httpContext)
    {
    var value = httpContext.Request.RouteValues["paramToCheck"]; // error here

    //... some logis with value

    await this._next(httpContext);
    }
    }

    编辑

    中间件位于 netstandard2.1类库中,它不能移动到api项目中,因为它很常见,应该由多个api项目使用。

    更新

    似乎当前无法实现,因为 RouteValues元包中的 Microsoft.AspNetCore.Http.Abstractions 3.0.0中添加了 NetCoreApp 3属性。由于最新版本是 netstandard 2.1,因此无法在 2.2.0项目中安装此软件包。

    最佳答案

    使用类库,对我来说,答案是升级到使用.netcore 3.1的Microsoft.AspNetCore.App而不是Microsoft.AspNetCore.Http.Abstractions v2.2
    here所述,.net core 3取消了所有小程序包,因此我将其替换

    <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
    </ItemGroup>


    <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App"/>
    </ItemGroup>

    然后我可以像这样访问路线:
    HttpContext.Request.RouteValues["version"];

    在 route 设置了 {version}的位置。

    关于c# - HttpRequest.RouteValues属性不可从代码访问,但可从调试器访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59610509/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com