[英]ASP.NET Core 6.0 with SPA, handle InvalidOperationException
我正在嘗試使用 ASP.NET Core 6.0 和 ReactJS 和 WebView2 創建一個小型應用程序,用於學習目的。 我published
並且運行沒有問題,如果我將自己運行它或從 CMD 運行它。 一旦我嘗試使用另一個應用程序運行它,它most of the time
都會失敗並給我這個錯誤:
System.InvalidOperationException:SPA 默認頁面中間件無法返回默認頁面“/index.html”,因為未找到它,並且沒有其他中間件處理該請求。 您的應用程序正在生產模式下運行,因此請確保它已發布,或者您已手動構建了 SPA。 或者,您可能希望切換到開發環境。
在 Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware。<>c__DisplayClass0_0.b__1(HttpContext 上下文,下一個 RequestDelegate)在 Microsoft.AspNetCore.Builder.UseExtensions。<>c__DisplayClass1_1.b__1(HttpContext 上下文)在 Microsoft.AspNetCore.SpaServices.SpaDefaultPageMiddleware。<> c__DisplayClass0_0.b__0(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseExtensions.<>c__DisplayClass1_1.b__1(HttpContext context) at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware .Invoke(HttpContext 上下文)在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)
我嘗試使用Debug
、 Production
、 Any CPU
、 x86
、 x64
進行構建。 也試過:
public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseRootRewrite(this IApplicationBuilder builder)
{
var socks = "/sockjs-node";
builder.Use(async (context, next) =>
{
if (!HttpMethods.IsGet(context.Request.Method) && !context.Request.Path.StartsWithSegments(socks))
{
if (!context.Response.HasStarted)
{
context.Response.StatusCode = 404;
context.Response.CompleteAsync().GetAwaiter().GetResult();
return;
}
}
await next();
});
return builder;
}
}
像這樣使用:
public class Startup() {
...
public void Configure(IApplicationBuilder app) {
app.UseRootRewrite();
app.UseSpa(config => {});
}
}
來自互聯網各地的許多其他建議,但似乎我找不到適合我的應用程序的任何解決方案。
也許有人可以幫助處理這個錯誤。
經過兩天的掙扎,我發現我的申請出了什么問題。 由於我是從父應用程序運行的,子應用程序不知何故獲取了父應用程序的路徑,當然,在父應用程序的文件夾中,沒有ClientApp/build
目錄。 我沒有將ClientApp/build
文件夾放在父應用程序的目錄中,而是更改了子應用程序源中的路徑,如下所示:
添加SpaStaticFiles
// In production, the React files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "Parent-dir/Child-dir/ClientApp/build";
Console.WriteLine(configuration.RootPath);
});
使用溫泉
app.UseSpa(spa =>
{
spa.Options.SourcePath = "Parent-dir/Child-dir/ClientApp";
if (env.IsDevelopment())
{
spa.UseReactDevelopmentServer(npmScript: "start");
}
});
將來,我會努力讓它變得更好,但現在,這解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.