从 DNX 迁移到 ASP.NET Core 2.0 时 API 丢失/更改

2023-12-26

我一直致力于将应用程序从过时的 DNX 迁移到 ASP.NET Core 2.0。在这样做的过程中,我们发现命名空间和 API 几乎没有变化,例如Microsoft.AspNet to Microsoft.AspNetCore。尽管我已经能够找到并修复大部分更改,但以下更改给我带来了问题:

在继承自的类中Route, 之内RouteAsync(RouteContext context)方法,使用 DNX 是context.IsHandled = true;,我如何表示现在已使用 ASP.NET Core 2.0 处理此问题?

我尝试从 GitHub 查找更改历史记录,但似乎没有与此相关的内容。


不再需要调用context.IsHandled from RouteAsync。如果您这样做,框架就会知道跳到下一条路线return没有Task。如果您返回一个任务,那么框架将处理(处理)它。

旧的 DNX / MVC6 / 预览代码

public async Task RouteAsync(RouteContext context)
{
    var requestPath = context.HttpContext.Request.Path.Value;

    if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == '/')
    {
        // Trim the leading slash
        requestPath = requestPath.Substring(1);
    }

    // Get the page id that matches.
    TPrimaryKey id;

    //If this returns false, that means the URI did not match
    if (!GetPageList().TryGetValue(requestPath, out id))
    {
        return;
    }

    //Invoke MVC controller/action
    var oldRouteData = context.RouteData;
    var newRouteData = new RouteData(oldRouteData);
    newRouteData.Routers.Add(_target);

    newRouteData.Values["controller"] = _controller;
    newRouteData.Values["action"] = _action;

    // This will be the primary key of the database row.
    // It might be an integer or a GUID.
    newRouteData.Values["id"] = id;

    try
    {
        context.RouteData = newRouteData;
        await _target.RouteAsync(context);
    }
    finally
    {
        // Restore the original values to prevent polluting the route data.
        if (!context.IsHandled)
        {
            context.RouteData = oldRouteData;
        }
    }
}

新的 .NET Core 1.x / .NET Core 2.x 代码

public async Task RouteAsync(RouteContext context)
{
    var requestPath = context.HttpContext.Request.Path.Value;

    if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == '/')
    {
        // Trim the leading slash
        requestPath = requestPath.Substring(1);
    }

    // Get the page id that matches.
    TPrimaryKey id;

    //If this returns false, that means the URI did not match
    if (!GetPageList().TryGetValue(requestPath, out id))
    {
        return;
    }

    //Invoke MVC controller/action
    var routeData = context.RouteData;

    routeData.Values["controller"] = _controller;
    routeData.Values["action"] = _action;

    // This will be the primary key of the database row.
    // It might be an integer or a GUID.
    routeData.Values["id"] = id;

    await _target.RouteAsync(context);
}

完整代码在这里(针对 .NET Core 1/2 进行了更新):启动后更改MVC6的路由集合 https://stackoverflow.com/q/32565768

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 DNX 迁移到 ASP.NET Core 2.0 时 API 丢失/更改 的相关文章

随机推荐

  • 如何读取 Windows 7 上的启动时间事件?

    我尝试使用 ETW 函数读取文件但没有成功 C Windows System32 winevt Logs Microsoft Windows Diagnostics Performance 4Operational evtx 为了捕获启动时
  • 在运行时将实例方法设为私有

    在另一个对象中注册该对象后 我需要将一些实例方法设为私有 我不想冻结该对象 因为它必须保持可编辑状态 只是功能较少 我不想取消定义这些方法 因为它们是在内部使用的 我需要的是这样的 class MyClass def my method p
  • 将列表拆分为N个列表,并将每个列表分配给多线程中的一个worker

    我正在编写一个脚本 它从表中获取 N 条记录 并通过多线程处理所述记录 以前 我只是在每个工作定义中的 SQL 语句中使用 Order by RAND 并希望不会出现重复 这种工作 重复数据删除稍后完成 但是 我想通过以下方式使我的脚本更加
  • Woocommerce - 允许针对不同状态再次订购

    我希望允许Order Again所有状态的功能 默认情况下 WooCommerce 仅允许状态为 已完成 的订单使用此功能 这似乎是一个两步过程 因为第一步需要向用户显示按钮 这是通过编辑此文件来完成的 wc template functi
  • libclang:添加编译器系统包含路径(Windows 中的 Python)

    按照此question https stackoverflow com questions 37098725 parsing with libclang unable to parse certain tokens python in wi
  • Nodejs HTTP Createserver - 从 html 文件提供服务时不可预测的 javascript 执行

    当我从我的 Node js Web 服务器提供具有一些 JavaScript 的 html 文件时 与我从外部源包含相同的 JavaScript 时相比 我得到了不同的结果 我已经验证 使用 javascript 内联或外部源直接打开 ht
  • RecyclerView 项目在片段之间切换后消失

    我的应用程序中有 4 个片段 它们在 NavActivity 中管理 protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState s
  • Hibernate不创建连接表

    我遇到了一个以前从未发生过的问题 我有ManyToMany关系 Hibernate 不会创建连接表 它仅创建实体表 我正在将 SpringDataJpa 与 MySQL 一起使用 医生实体 Entity Table name doctors
  • 从等高线生成高度图的算法是什么?

    我正在寻找插入一些轮廓线来生成 3D 视图 轮廓不存储在图片中 轮廓的每个点的坐标仅存储在 std vector 中 对于凸轮廓 似乎 我自己没有检查 通过使用两个最接近轮廓的两个最近点之间的距离可以轻松计算高度 线性插值 我的轮廓不一定是
  • 何时在 clojure(或 lisp)中使用感叹号?

    他们说在命名不纯函数时使用感叹号 但我不太理解 不纯 的功能 他们是吗 函数更改其参数的状态 通过重置 更改 java object methods 函数发生副作用 例如 打印 吐出 or both 显然 官方的 clojure api 并
  • 无法解析的外部符号(OpenGL 和 C++)

    好的 所以我正在编写一个小项目 没什么复杂的 它只有几个类 正如标题所暗示的 它使用 OpenGL 目前 还没有 真正的 主要功能 我在使用 gl 函数调用的地方都包含了 glew h 并将其添加到链接器输入 glew32 lib 中 然而
  • 如何在python中使用套接字而无需等待

    我用Python创建了一个游戏 该游戏由几条蛇组成 每条蛇由不同的计算机控制 每台计算机都会向服务器计算机发送蛇所指向的角度 问题是该命令 client mess client socket recv 1024 极大的抑制了服务器的运行 导
  • 使用 aws-sdk 从 javascript(reactjs) 调用 lambda(node/express - 无服务器快速路由)

    Reactjs const result await invokeLambda points 调用Lambda js const AWS require aws sdk AWS config update accessKeyId id se
  • 调试时忽略 Visual Studio 中的项目

    在 Visual Studio 中 如果您有一个包含许多项目的解决方案 是否可以指示调试器忽略某些项目 在这个意义上将它们视为外部 DLL 吗 我们有很多我想调试的帮助程序代码 例如 如果我处于函数调用中 并且进入其中 我想跳过 IoC 代
  • 数组的 IsEmpty() 函数

    我想测试我的数组是否为空 我尝试使用该功能IsEmpty 但函数总是返回False 并且不要输入 if 条件 我的代码如下 Sub Freeze Dim tab freeze as variant If IsEmpty tab freeze
  • Scala mixin 到类实例

    Scala 中是否可以对类实例进行一些混合 例如 我有一些 MyClass 实例var x new MyClass我想在某些方法或特征上扩展它而不复制它 Edit 我正在寻找延伸的方法x当它被实例化之后 因此 例如在函数方法中 得到x作为参
  • Facebook 转化事件是否有类似于 Google Analytics 的回调功能?

    我在文档中找不到转化跟踪中是否有任何回调功能 https developers facebook com docs ads for websites tag api https developers facebook com docs ad
  • 使用“;”下载文件或文件名中的“#”会破坏文件名

    我有一个名为 AttachmentDownload aspx 的文件 并且 Page Load 方法内部有这样的代码 可以提供下载文件 除包含 的名称外 所有名称均可在 IE 中正常工作 或者 他们允许用户以 AttachmentDownl
  • github 搜索限制结果

    我需要在 Github 上进行大量搜索以获取论文中的统计数据 例如 我需要在 GitHub 上探索大量 Android 项目 但该网站将搜索结果限制为 1000 个 例如 还使用Java GitHub API我尝试使用该方法库org ecl
  • 从 DNX 迁移到 ASP.NET Core 2.0 时 API 丢失/更改

    我一直致力于将应用程序从过时的 DNX 迁移到 ASP NET Core 2 0 在这样做的过程中 我们发现命名空间和 API 几乎没有变化 例如Microsoft AspNet to Microsoft AspNetCore 尽管我已经能