Blazor Wasm Appsettings 基本 Url 在 /

问题描述 投票:0回答:1

我正在 .NET 8 上使用 Blazor Wasm。我第一次尝试将我的应用程序发布到开发服务器和 QA 服务器。我遇到了一个问题,所有 API 调用都失败。查看网络跟踪,我可以看到 API 的基本 url 被切断。

我的基本网址是这样的:

"BaseFakeApiUrl": "https://dev.FakeSite.com/IisSiteName"

所以在这个例子中

/IisSiteName
被切断了。我确实对 url 进行了更改(在 FakeSite 中添加了 2)以验证我是否在正确的文件中。我还尝试在
/
之后添加
IisSiteName

我不知道为什么 iis 站点名称被切断,任何指导将不胜感激。

编辑:我注意到

appsettings.json
显示在我的网络跟踪中,首先它显示
appsettings.development.json
并检查预览,它为基本 url 设置了正确的 url。然后它加载了
appsettings.json
,但没有加载。我对其进行了更改,使其具有正确的 url,该 url 反映在我的网络跟踪中,但 API 调用仍然缺少 IIS 站点名称

编辑2:这是我如何使用它

我有我的 appsettings.development.json (我通过向子域添加 2 并检查它是否出现在网络跟踪中来确认正在使用它)

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "BaseServiceCompanyApiUrl": "https://dev.test.com/IisSiteName"
}

我使用 Program.cs 中的应用程序设置来注入具有基本 url 的 HttpClient

builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.Configuration.GetValue<string>("BaseServiceCompanyApiUrl")) });
builder.Services.AddHttpClient<ServiceCompanyServices>(x => { x.BaseAddress = new Uri(builder.Configuration.GetValue<string>("BaseServiceCompanyApiUrl")); });
builder.Services.AddHttpClient<AuthorizationService>(x => { x.BaseAddress = new Uri(builder.Configuration.GetValue<string>("BaseServiceCompanyApiUrl")); });

然后在我的服务中我这样做

public class AuthorizationService
{
    private readonly HttpClient client;

    public AuthorizationService(HttpClient client)
    {
        this.client = client;
    }

    public async Task<UserAuthInfo>GetUserAuthInfo()
    {
        var url = "/Authenticate/GetUserAuthInfo";
        return await GenericApiServices.GetFromAPI<UserAuthInfo>(client, url);
    }
}

使用 GetUesrAuthInfo() 时,我可以在网络跟踪中看到它正在调用 https://dev.test.com/Authenticate/GetUserInfo,请注意它缺少基本 url 中的 /IisSiteName。

编辑 3。我意识到我没有包含 GenericApi 方法,所以就在这里。请注意,调试时调用 GetAsync() 时的 url 是正确的

 public static class GenericApiServices
 {
     public static async Task<T> GetFromAPI<T>(HttpClient client, string url)
     {

         var response = await client.GetAsync(url);

         if (response.IsSuccessStatusCode)
             return await response.Content.ReadFromJsonAsync<T>();
         else if (response.StatusCode == System.Net.HttpStatusCode.NotFound)
         {
             Console.WriteLine("Throwing File Not Found Exception");
             var errorMessage = await response.Content.ReadFromJsonAsync<string>();
             if (String.IsNullOrEmpty(errorMessage))
                 errorMessage = "File Not Found";
             throw new FileNotFoundException(errorMessage);
         }
         else
         {
             var errorMessage = await response.Content.ReadFromJsonAsync<string>();
             if (String.IsNullOrEmpty(errorMessage))
                 errorMessage = "An Error occured.";
             throw new Exception(errorMessage);
         }

     }
blazor .net-8.0 appsettings
1个回答
0
投票

我的一位同事在这里找到了解决方案:https://github.com/dotnet/runtime/issues/29309

问题是基本 url 必须以 / 结尾,我已经尝试过了,但您还必须确保传递给 GetAsync 的 url 不以 / 开头。我原以为它会向我显示一个 URL,其中的基数是正确的,并且带有额外的 /,但事实并非如此

TLDR:将 / 添加到基本 url 的末尾,从传递给 GetAsync() 的 url 开头删除 /

© www.soinside.com 2019 - 2024. All rights reserved.