簡體   English   中英

ASP.NET Core 6.0 with SPA,處理 InvalidOperationException

[英]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 上下文)

我嘗試使用DebugProductionAny CPUx86x64進行構建。 也試過:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM