use*_*445 3 .net azure webassembly azure-functions blazor
我在 Visual Studio 中有一个 Blazor WebAssembly 项目。我现在刚刚向解决方案添加了一个 Azure Function 项目。我打算将其发布到新的 Azure Static Web App。
我一直遵循此 Microsoft 文档中的说明。
使用 Azure 静态 Web 应用发布 Blazor WebAssembly 应用和 .NET API
根据文档,我只需要使用 launchSettings.json 在本地设置 CORS,然后在 Visual Studio 中同时运行 Api 和客户端项目。然后我应该能够像这样调用 Api。
string test = await Http.GetStringAsync("api/Test");
Run Code Online (Sandbox Code Playgroud)
测试后,字符串变量“test”仅返回以下内容。
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <title>Client</title> <base href="/" /> <link href="css/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="css/app.css" rel="stylesheet" /> <link href="Client.styles.css" rel="stylesheet" /> <link href="manifest.json" rel="manifest" /> <link rel="apple-touch-icon" sizes="512x512" href="icon-512.png" /> </head> <body> <div id="app">Loading...</div> <div id="blazor-error-ui"> An unhandled error has occurred. <a href="" class="reload">Reload</a> <a class="dismiss"></a> </div> <script src="_framework/blazor.webassembly.js"></script> <script>navigator.serviceWorker.register('service-worker.js');</script> </body> </html>
Run Code Online (Sandbox Code Playgroud)
这似乎只是同一页面的 HTML,但带有“发生了未处理的错误”。您通常会在页面底部看到该消息以及“重新加载”链接。然而这并没有发生,我只是获取它的 HTML。很明显出现了问题并且错误没有被显示。
另外,检查浏览器控制台日志没有显示任何错误,这很奇怪。通常,当收到这样的错误时,浏览器日志中会有一些内容。
如果我将代码中的 Api 调用更改为以下内容,那么它就可以正常工作。
string test = await Http.GetStringAsync("http://localhost:7071/api/Test");
Run Code Online (Sandbox Code Playgroud)
显然我不能保持这样,因为在发布到实时站点之前我必须更改每个回调。然而,这表明它正在工作,由于某种原因,客户端在仅使用“api/Test”时看不到 api。
我在文档中看不到我丢失的任何其他内容。为什么文档说它应该有效,但它不适合我?我可能会错过什么?
因此,在将我的代码与Microsoft 文档使用的 github 存储库中的代码进行仔细比较后,我发现他们在 Client/wwwroot 文件夹中有一个名为 appsettings.Development.json 的文件,该文件用于向客户端应用程序提供 URL 前缀,以便它可以在本地访问Api项目:
{
"API_Prefix": "http://localhost:7071"
}
Run Code Online (Sandbox Code Playgroud)
然后将此前缀添加到 Program.cs 中的 BaseAddress 之前:
builder.Services.AddScoped(sp =>
new HttpClient { BaseAddress = new Uri(builder.Configuration["API_Prefix"] ?? builder.HostEnvironment.BaseAddress) });
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是,文档完全忽略了这一点,并且没有表明这是必要的步骤。
我将其发布在这里,以防其他人遇到同样的问题。
归档时间: |
|
查看次数: |
566 次 |
最近记录: |