[英]how to have a single controller and action handle all routes in asp.net core?
[英]ASP.NET Core with SPA, how to handle invalid routes on root?
我们的 ASP.NET 内核以单页应用程序作为客户端,托管在 Azure Web 服务上。 我们注意到,所有环境和部署槽都会在 /index.html 上偶尔收到 POST 操作请求。 在 ASP.NET 核心应用程序中,通过配置 SPA static 文件提供程序中间件,将对根的 http 请求路由到 SPA 应用程序文件:
services.AddSpaStaticFiles(configuration => {
configuration.RootPath = "ClientApp/dist/ClientApp";
});
当在 /index.html 上请求这些 POST 操作时,应用程序将抛出异常:
SPA 默认页面中间件无法返回默认页面“/index.html”,因为未找到它,并且没有其他中间件处理该请求。
反过来,异常会导致我们的性能监控出现问题,因为异常不会在任何地方被捕获/处理。 特别是如果这种情况在短时间内发生多次。
问题:我们可以配置什么来立即返回 403 或类似的响应,或者设置为我们至少捕获异常?
SPA 默认页面中间件无法返回默认页面“/index.html”,因为未找到它,并且没有其他中间件处理该请求。
当在构建或发布项目时未复制 wwwroot 文件夹时,会出现此问题。
在任何一种情况下,这两个命令都不会复制 wwwroot 文件夹。
作为一种解决方法,您可以将此目标添加到您的项目文件中:
<Target Name="AddGeneratedContentItems" BeforeTargets="AssignTargetPaths" DependsOnTargets="PrepareForPublish">
<ItemGroup>
<Content Include="wwwroot/**" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);@(Content)" />
</ItemGroup>
</Target>
我们可以配置什么来立即返回 403 或类似的响应,或者设置为我们至少捕获异常?
SPA 默认页面中间件无法返回默认页面“/index.html”,因为未找到它,并且没有其他中间件处理该请求。
当在构建或发布项目时未复制 wwwroot 文件夹时,会出现此问题。
在任何一种情况下,这两个命令都不会复制 wwwroot 文件夹。
作为一种解决方法,您可以将此目标添加到您的项目文件中:
<Target Name="AddGeneratedContentItems" BeforeTargets="AssignTargetPaths" DependsOnTargets="PrepareForPublish">
<ItemGroup>
<Content Include="wwwroot/**" CopyToPublishDirectory="PreserveNewest" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder);@(Content)" />
</ItemGroup>
</Target>
我们可以配置什么来立即返回 403 或类似的响应,或者设置为我们至少捕获异常?
我在 GitHub 的问题案例中找到了解决方案。 此解决方案仅在请求满足正确条件时才会调用中间件:当它是 GET 请求时。
在 Startup class 的 Configure 方法中:
app.UseWhen(context => HttpMethods.IsGet(context.Request.Method), builder =>
{
builder.UseSpa(spa =>
{
// ... add any option you intend to use for the Spa middleware
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.