1

我正在尝试将一个 asp.net 核心托管的 blazor webassembly 应用程序部署到 Netlify。我已经将Server项目的release版本发布到了我桌面的一个目录中,并上传到了github。我将 Netlify 的发布目录设置为 wwwroot 并且该站点确实呈现得很好。但是,如果我尝试调用 api 控制器,它会返回 404。具体来说,这是我的代码:

    //Register.razor in the Client project
    if (Model.Password.Length >= 6 && Model.Password == Model.ConfirmPassword)
    {
        await HttpClient.PostAsJsonAsync<RegisterModel>("api/Register/Post", Model);
        NavigationManager.NavigateTo("/");
    }

    //In my controller
    [Route("api/Register")]
    public class RegisterController : Controller
    {
        private UserContext UserContext { get; set; }
        private IHasher Hasher = new Pbkdf2Hasher();
        public RegisterController (UserContext userContext)
        {
            UserContext = userContext;
        }

        [RequireHttps]
        [HttpPost]
        [Route("Post")]
        public async Task Post([FromBody]RegisterModel model)
        {
            var user = new UserModel
            {
                Email = model.Email,
                Password = Hasher.Hash(model.Password)
            };
            await UserContext.AddAsync(user);
            await UserContext.SaveChangesAsync();
        }
    }

我发送的 url 请求是:https://(NetlifyDefaultDomain)/api/Register/Post。但是,我收到 404 响应。在本地主机上它工作得很好。我想象有一个设置,我必须在某处更改才能使请求 URL 起作用。我试过寻找,但找不到指导。我需要改变什么?谢谢

编辑

这是我的客户项目的 Program.cs 文件

public class Program
    {
        public static async Task Main(string[] args)
        {
            var builder = WebAssemblyHostBuilder.CreateDefault(args);
            builder.RootComponents.Add<App>("app");
            builder.Services.AddTransient(sp => new HttpClient { 
            BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
            builder.Services.AddBlazoredLocalStorage();
            builder.Services.AddAuthorizationCore();
            builder.Services.AddScoped<AuthenticationStateProvider, 
            ApiAuthenticationStateProvider>();
            builder.Services.AddScoped<IAuthService, AuthService>();
            await builder.Build().RunAsync();
        }
    }

目标框架是netstandard2.1,它是webassembly 3.2.0。

4

1 回答 1

4

Netlify 是一个静态文件主机。他们不在其服务器上运行任何服务器端应用程序,例如 .NET core。

因此,您可以在 Netlify 上托管 Blazor 客户端应用程序,但如果您希望服务器端代码运行,则必须将其托管在其他地方。

如果您正在为您的 API 寻找免费托管服务,那么有些云提供商提供免费套餐。Azure 有免费的应用服务,但有一些限制,谷歌云有一个免费的微型 VPS,可以托管一个小应用程序,heroku 也有一个免费的产品。

来自 Digital Ocean、Vultr 或 Linode 的廉价 VPS 是另一种选择。

于 2020-06-15T23:44:30.487 回答