如何在错误的 API url 上返回 404? (ASP.NET 核心 + SPA)

2024-04-22

我需要在错误的 api 调用上返回 404,以便我可以在客户端(Angular 5)上为用户创建正确的响应。目前后端返回状态码200和index.html,这会导致前端出现json解析错误。

我使用 ASP.NET Core 2.1 和 Angular 模板项目创建了新的 Web 项目。这是the link https://wrongapiurltestapp.azurewebsites.net/到该模板的已发布版本。我根本没有更改模板代码,我只是按原样将其发布在 azure 上。 (在开发模式下,我如预期收到 404 错误)。

如上所述here https://github.com/aspnet/JavaScriptServices/issues/973#issuecomment-303778580默认行为应该是 404。

Here https://pastebin.com/Wme9MKUR is the Startup.cs, and here https://pastebin.com/wtGXkH9Z SampleDataController.cs.

我想在中使用类似的东西Startup.cs:

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action}/{id?}");
        });

        app.MapWhen(x => x.Request.Path.Value.Contains("/api"), builder =>
        {
            builder.UseMvc(routes =>
            {
                routes.MapSpaFallbackRoute(
                    name: "spa-fallback",
                    defaults: new { controller = "Home", action = "Error" });
            });
        });

And in HomeController.cs:

    public IActionResult Error()
    {
        return NotFound();
    }

但这似乎是错误的,尽管它有效。


Note:根据您的链接,我假设您正在使用app.UseSpa()中间件。

路由中间件按顺序执行,如果请求找不到控制器404返回状态。这UseSpamiddlware 是一个包罗万象的工具,任何到达该点的请求都将始终返回默认的 SPA 页面。这意味着对尚未找到控制器的路由的任何请求将始终返回默认 SPA 页面,并且不会抛出 404。

你想做的只是打电话UseSpa()如果路由没有前缀/api。这基本上允许任何以/api跳过该点。

代替:

app.UseSpa(spa =>
{
    //[Snip]
});

Use:

app.MapWhen(x => !x.Request.Path.Value.StartsWith("/api"), builder =>
{
    builder.UseSpa(spa =>
    {
        //[Snip]
    });
});

这将使任何以/api过了该点,如果没有其他中间件或路由匹配,404将被退回。

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

如何在错误的 API url 上返回 404? (ASP.NET 核心 + SPA) 的相关文章

随机推荐

  • 如何重置html中选定的索引下拉值?

    我需要在提交表单后为下拉菜单设置 selectedindex 0 我尝试如下 filterByName prop selectedIndex 0 filterByName selectedIndex 0 filterByName get 0
  • Oracle 查询和聚合函数

    我假设在oracle 中有表名employee 1 如果 mobile no 和 sim no 相同 我想选择最大 start date 我已经尝试过 但没有成功 请帮忙 下面是employee 1表 Mobile No Sim NO St
  • 将字符串数组绑定到 datagridview 的列

    我正在设计一个有 datagridview 的 winform 我正在为该 datagridview 分配一个数据表 DataTable dt new DataTable dt Columns Add items typeof string
  • 学习 MacRuby 的好资源 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我不懂 Ruby 但我有兴趣学习 MacRuby 您会推荐什么作为您的最佳资源 书籍 博客 网站 Fo
  • 实体框架迁移问题

    我在 EF 迁移方面遇到问题 特别是让 Enable Migrations 命令发挥作用 当我在包管理器控制台中执行命令时 收到以下错误 System Management Automation PSArgumentException 找不
  • ASP.NET Core 2.0 站点 - FileIOException System.Runtime

    一位同事正在为我们的下一份工作整理一些框架项目 这些项目在他的机器上运行良好 并且我们的其中一台开发服务器正在托管开发实例 由于我们刚刚建立 这些项目或多或少是空的 由单个静态 html 文件组成 这些项目在我的开发机器上构建得很好 但一旦
  • Python 3.x 列表理解 VS 元组生成器

    我想使用内存 速度或其他什么原因吗 tuple i for i in range 5000 代替 i for i in range 5000 如果我不介意元组的不变性 基本上 列表理解比生成器表达式更快 因为 它的迭代在 C 中执行 请阅读
  • 按 HTML 实体分割字符串?

    我的字符串包含很多 HTML 实体 就像这样 大家好 大家好 我想按 HTML 实体将其拆分为 Hello大家 there 有人可以建议我一种方法吗 可能正在使用正则表达式 看起来你可以分开 正则表达式 也就是说 分隔符是以以下开头的字符串
  • 货币数据类型精度 - SQL Server (SSMS)

    在sql server management studio中 数据类型 金钱 当我输入带有小数的金额时 它会自动添加零以填充到百分之一 如何确定小数点后的空格数 点后面零的个数称为precision的一种数据类型 这money数据类型有一个
  • Swagger Editor 3.8 示例不适用于参考数组模式

    这个问题是后续问题这个类似的 https stackoverflow com q 52595690 1571426 正如 Helen 要求提出一个新问题 数组类型模式似乎只接受 示例 而不接受 示例 以下架构会产生错误编辑器 swagger
  • Android 8 本机库崩溃

    自从 Android 8 Oreo 推出以来 我们的应用程序一直在不同的地方崩溃 所有 Play 商店崩溃报告都显示本机崩溃 最常出现的一个似乎是在本机库中 最常崩溃的设备是 Google Pixel Pixel XL 也出现过一些崩溃 我
  • Javascript 随机定位 Div 且不重叠它们

    我一直在研究一个随机的概念想法 即让 6 个云出现在一个页面上 并从数据库中提取随机评论 这部分很简单 但我发现确保 6 朵云不相互重叠非常困难 我对碰撞检测进行了很多研究 发现在将新的 随机定位 div 放置在页面上之前 没有真正合适的方
  • 我的车库里真的有一辆车吗? [复制]

    这个问题在这里已经有答案了 我是 Java 编程的新手 正在尝试掌握 OOP 所以我构建了这个抽象类 public abstract class Vehicle 和2个子类 public class Car extends Vehicle
  • 无法解析“adb version”的输出

    我使用 Ubuntu 11 10 和 Eclipse 进行 Android 开发 我已经创建了一个新项目 但它包含错误 Failed to parse the output of adb version 如果有人知道我该如何解决这个问题 我
  • 如何在swift中插入子层?

    我正在创建一个视图并向其添加渐变层 我有这个 import UIKit import QuartzCore let rect CGRect CGRectMake 0 0 320 100 var vista UIView init frame
  • 如何在 Clojure 中更新原子的向量元素?

    我有一个矢量原子 我想更新一个本身就是地图的条目 def vector atom atom swap vector atom conj id 1 name myname 我该如何只更新该成员 在可变的 Java 领域的思维方式中 我会做这样
  • Windows窗体中如何设置滚动条

    我在 net中有一个winform 我放置了太多控件并设置了表单的高度和宽度 但是 当我编译表单并减小表单的大小时 我的控件不可见 当我增加表单的大小时 控件在自己的位置可见 我希望在减小表单大小时出现滚动条 并在增加表单大小时使滚动条消失
  • 将网页中的表格导入 Excel

    我只有中高级的Excel水平和中级的VBA与Excel背景 我想要做的是从链接中显示的网页导入表格 http www admission unmsm edu pe res20130914 A 011 0 html http www admi
  • 如何使用 Spring Batch 进行聚合?

    我想弄清楚如何使用 Spring Batch 进行聚合 例如 我有一个包含姓名列表的 CSV 文件 name John Amy John Ryan 我想要文本文件中的名称计数 name count Amy 1 John 2 Ryan 1 根
  • 如何在错误的 API url 上返回 404? (ASP.NET 核心 + SPA)

    我需要在错误的 api 调用上返回 404 以便我可以在客户端 Angular 5 上为用户创建正确的响应 目前后端返回状态码200和index html 这会导致前端出现json解析错误 我使用 ASP NET Core 2 1 和 An