如何设置 ASP.NET Core 应用程序的基本路径,同时禁用根路径的访问?

2024-01-29

我知道我可以使用设置我的服务的基本路径app.UsePathBase("/AppPath");这样我的 API 就可以从http://example.com/AppPath/controller1但如果我这样做,我的 API 也可以从根路径获得http://example.com/controller1。如何禁用从根路径的访问?

我也尝试使用这样的路线app.UseMvc(routes => routes.MapRoute("default", "IRate/{controller}/{action}/{id?}"));但它也有同样的问题。

我想要这样做的原因是因为当它部署在生产中时,它将部署在应用程序前缀下(而不是作为根应用程序),并且当我在调试期间在本地主机上运行 API 时,我想模拟生产条件。


这是设计使然根据这个 Github 问题 https://github.com/aspnet/HttpAbstractions/issues/893.

UsePathBase 主要是为了让这些段不妨碍您,因为它们是部署细节,如果它们保留下来,就会弄乱您的路由。

考虑替代方案。如果要禁用根路径,会如何操作? 404 并不是真正合适,大概该路径在托管根的站点的单独实例上可用。如果您确实想要 404,则可以使用如上所示的 Map。

如果您想在访问根时返回 404,可以使用嵌套映射,该问题中对此进行了描述:

在这种情况下,您可能想要更接近于此的东西,带有嵌套MapMiddleware :

public void Configure(IApplicationBuilder app)
{
    app.Map("/basepath", mainapp =>
    {
        mainapp.Map("/ping", map => map.Run(async
            ctx => await ctx.Response.WriteAsync("pong")));

        mainapp.UseMvc();
    });
}

通过这种方式,您可以仅为以下请求指定映射、路由等/basepath。其他所有内容都会被丢弃并返回 404。

你必须记得打电话mainapp代替app对于所有配置调用。否则,您最终可能会得到指向根而不是自定义基本路径的脚本和 css URL。您可以通过从以下位置提取配置代码来避免这种情况Configure(app,env)进入一个单独的方法,例如:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.Map("/AppPath", mainapp =>
        {
            mappedConfigure(mainapp,env);
        });
    }

    private void mappedConfigure(IApplicationBuilder app,IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置 ASP.NET Core 应用程序的基本路径,同时禁用根路径的访问? 的相关文章

  • 如何在 ASP.NET Core 中转换 AppSettings

    我被引导相信appsettings json及其环境对应项 开发 登台 生产 取代了 Web config 转换 这在开发环境中工作得很好 这些环境的变量存在于launchSettings json 但是 如果我使用发布功能 将发布配置为使
  • 通过 AWS ALB 的 HTTP2 PING 帧(gRPC keepalive ping)

    我正在使用 AWS Application Load Balancer ALB 公开 ASP NET Core gRPC 服务 这些服务在 Fargate 容器中运行并公开不安全的 HTTP 端口 ALB 终止外部 TLS 连接 并根据路由
  • MSAL.Net 没有帐户或登录提示传递到 AcquireTokenSilent 调用

    我见过很多相同或类似的问题 并尝试了他们所有的答案 如果有的话 但这些都不适合我 我在用着这个例子 https github com Azure Samples ms identity javascript angular spa aspn
  • 无法在 Visual Studio 2022 中启动调试适配器

    如果我创建一个启用了 Docker 支持的 ASP Core MVC 目标框架 5 0 并启动它 我会得到 发生一个或多个错误 无法启动调试适配器 附加信息可能会 在输出窗口中可用 操作被取消 这是调试输出 启用 DebugAdapterH
  • 重试 polly 单元测试(xunit 和 moq)

    我有 net core weabpi 参见下面的代码 我正在使用 polly 重试策略 请参阅下面的策略 我想对端点 getProducts 进行单元测试并测试 polly 重试 我已经发现这些例子 https github com App
  • .NET Core Web API 密钥

    我正在开发一个应用程序 用户可以通过用户名和密码进行身份验证 我们提供一个 JWT 令牌 然后在服务器上进行验证 我想补充的一件事是能够拥有一个特殊的 API 密钥 guid 用户在与此应用程序集成时可以使用该密钥 而不是使用用户名和密码
  • MVC 6通过Nuget添加后引用Jquery

    我创建了一个新的 MVC 6 项目 空模板 通过 NuGet 添加了 JQuery 那么如何在 Layout 文件中或您想要使用它的任何地方引用它 我没有包含 Jquery 的脚本文件夹 HERE
  • 通过托管环境进行自托管

    我正在尝试通过以下方式将 ASP NET Core NET 4 6 1 应用程序作为自托管运行网络监听器 https docs asp net en latest fundamentals servers html weblistener
  • .net core 2.0代理请求总是导致http 407(需要代理身份验证)

    我正在尝试通过 net core 2 0 Web 应用程序中的 WebProxy 发出 HTTP 请求 我得到的代码在 net框架中运行良好 所以我知道 相信 这不是环境问题 我也尝试使用两者来发出请求HttpWebRequest and
  • 无法使用 ASP.NET Core 从 JWT 令牌获取声明

    我正在尝试使用 ASP NET Core 实现 JWT 持有者身份验证的非常简单的实现 我从控制器返回的响应有点像这样 var identity new ClaimsIdentity identity AddClaim new Claim
  • ASP.NET Core URL 重写

    我正在尝试将我的网站从 www 重定向到非 www 规则以及 http 到 https https example com https example com 在中间件中 我曾经在 web config 中进行这些重定向更改 例如
  • ASP.NET Core 会话超时

    我记得我们在 ASP NET 中使用了 session timeout 来更改会话超时 如果不更改 则为 20 分钟 我尝试在 Startup cs 中更改 ASP NET Core 3 1 中的会话超时 但没有任何反应 我对操作员使用身份
  • .Net Core 模拟无法与 Process.Start 一起使用

    在 Net Core 下使用模拟时 我似乎无法以其他用户身份启动进程 我在 Linqpad 中以 User1 身份运行此脚本 并尝试以 User2 身份启动程序 起初 模仿似乎有效 Console Writeline 当前用户的 s 从 U
  • 使用 ASP.Net vNext 发送邮件

    一般来说 在传统的 ASP Net 和 Net 中 发送邮件是通过System Net Mail所在的类System dll 现在有了KRE vNext好像就没有了System Net Mail作为一个单独的包 参考 net453 框架在p
  • 选择里面的 Include in EF Core

    我有一个如下所示的实体 为简洁起见 部分删除 它包括许多其他属性 public class Tender Key DatabaseGenerated DatabaseGeneratedOption Identity public int I
  • 使用 IAsyncEnumerable 对另一个服务或 API 进行异步调用并批量返回响应

    我正在尝试创建一个 API 一旦准备好就返回结果 目标是 准备就绪后立即生成结果的 API 端点 消费应用程序调用端点并在数据准备好后立即处理数据 我的 API 调用另一个服务 HttpGet Route stream public asy
  • 当路径长度超过 260 个字符时 System.IO.DirectoryNotFoundException [重复]

    这个问题在这里已经有答案了 我有 ASP NET Core MVC 项目 针对 NET 4 62 我正在尝试保存文件 当路径长度低于 260 或 248 我不确定 时 一切正常 但是当路径长度更长时 我会得到一个System IO Dire
  • .NET Core MVC 中的可选模型属性绑定

    我已经创建了一个AccountModel它具有以下属性 public class AccountModel Required EmailAddress public string Email get set Required StringL
  • Azure 应用服务在配置中添加字符串数组

    Net core 应用程序并在 Azure 应用服务中部署该应用程序 在我的应用程序中 我有一个包含以下内容的应用程序 settings json 文件 Roles Roles Admins Users 我的 ARM 模板中有以下配置 参数
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste

随机推荐

  • 运行两个异步函数而不互相阻塞

    我有一个异步函数 我想 并行 运行另一个异步函数 但我需要在某个时刻去做在第一个函数内 我见过很多例子 但它们都同时启动两个功能 这不是我想要的 我创建了这个简单的示例来说明我想要实现的目标 以及我尝试过的目标 import asyncio
  • 使用实体框架代码优先的 XML 字段

    我将实体框架与 Code First 模型一起使用 宠物项目 我喜欢编辑简单的类并自动更新我的架构 我有一堂课如下 Table Polygons public class Polygon public int PolygonId get s
  • std:: 在 C++/17 中没有成员“文件系统”

    我正在尝试包括
  • 无法在AWS中使用RDS创建弹性Beanstalk环境

    我正在尝试使用现有的 VPC 创建新的 ELB 环境 但我无法创建环境并出现以下错误 错误创建名为 sg 5xxxxxxx 的安全组失败原因 资源创建已取消 错误 创建 EIP xx xxx xxx xxx 失败 原因 资源创建已取消 错误
  • 我可以在R中的ggplot2中使用格子中的带状疱疹吗

    可以使用shingles定义特定范围ggplot2 据我所理解shingles是生成组的一种方法 我们能否创造这样的shingles 并将它们用于ggplot2 facet grid获得图表 根据评论 ggplot无法绘制木瓦 以晶格在条带
  • StringIndexOutOfBoundsException

    我在让方法在 Java 中正常工作时遇到一些问题 在程序中 我创建了一个由许多不同长度的不同单词组成的数组 我正在研究的方法应该读取用户输入的字长 字母和位置 然后 Java 将打印出与这三个参数匹配的任何单词 例如 如果用户输入字长 4
  • 如何在另一个目录中分离托管和非托管 DLL

    我的发布文件夹是 MyApp exe MyManagedDLL dll NativeDLL dll MyApp 使用托管 dll 它通过 pinvoke 调用本机 dll 我尝试将它们移动到另一个子文件夹 并再次引用托管 dll 当我运行我
  • 查找本地 git 分支的远程父分支

    如何获取遥控器的名称git本地的分支git当前提交已分支 我假设这是一个 4 步过程 前三步可能如下 Step One Get the name of the current branch in the local git repo git
  • 如何在 swagger yaml 中定义 HashMap> 属性?

    我正在使用 swagger 在 Java 和 Type 脚本中生成类 我在使用对象列表作为值定义地图属性时遇到问题 我尝试定义如下 DataMap type object additionalProperties type array Th
  • golang中的多类型解码器

    我有一个 XML 文档 某些字段具有自定义格式 例子
  • 将 yz 和 xz 网格添加到 scatterplot3d

    在使用该功能时scatterplot3d 来自 scatterplot3d 包 grid TRUE只绘制 XY 平面的网格 看一下函数源代码只有X和Y分量 我还想绘制 YZ 和 XZ 平面的网格 如下图所示 我在图像中搜索了带有这些网格的
  • 使用 Objective-C 加密和解密密码

    如何加密 nsstring 并将其存储在文件中 以及如何解密 请建议我应该使用什么API 这是我用于加密的函数 DES cfb64 encrypt 无符号 char pchInputData 无符号 char pchOutCipher 大小
  • 使用可变宽度 div 时的 CSS 文本省略号

    我想知道当父 div 和相邻 div 不允许足够的空间时 是否有任何方法可以让浮动 div 中的文本获得省略号 例如 div class parent div div class text div This is text I d like
  • 如何在django频道休息框架中订阅模型的所有实例?

    我想将 API 的行为更改为 JSON 触发 从浏览器调用 但由于我对 Python 的了解有限 我什至无法从 Python 客户端调用它 有人可以帮我怎么做吗manual https github com hishnash djangoc
  • 为什么 $locationChangeStart 在页面加载时被触发?

    最近 我在生产中偶然发现了一段非常奇怪的代码 它似乎利用了这样一个事实 在某些情况下 Angular 可能会触发 locationChangeStart初始页面加载时发生的事件 此外next参数值将等于current价值 这对我来说似乎很奇
  • ColdFusion 9 CFZIP 从 ColdFusion 11 CFZIP 创建的 Zip 文件上出现解压缩错误

    我支持的 ColdFusion 应用程序安装在两个不同的位置 一个位置运行带有 ColdFusion 9 和 MS SQL Server 2008 的 Windows Server 2008 另一个位置运行带有 ColdFusion 11
  • TinyMCE 将列表框项目渲染为 html

    我创建了一个 TinyMCE 插件 需要列表框项目来显示 html 这是我的插件 editor addButton icons title Foo text Foo type button onclick function editor w
  • 如何查看手机是否有GPS设备?

    我正在尝试找到一段代码可以告诉我Android手机是否有GPS设备 我在搜索结果中获得的大多数示例都表明 GPS 是否启用 我感兴趣的是Android手机是否有物理GPS设备 Thanks 从 API 级别 8 Froyo 开始 您可以使用
  • ggplot 中按比例大小的箭头

    基于 ggplot2 构建密封件示例 http docs ggplot2 org current geom segment html 我正在尝试更改箭头的粗细 以便它们的整体大小更好地反映数据变量 我可以指定长度和厚度 但不知道如何更改箭头
  • 如何设置 ASP.NET Core 应用程序的基本路径,同时禁用根路径的访问?

    我知道我可以使用设置我的服务的基本路径app UsePathBase AppPath 这样我的 API 就可以从http example com AppPath controller1但如果我这样做 我的 API 也可以从根路径获得http