我正尝试将一个asp.net核心托管的blazor webassembly应用程序部署到Netlify。我已将Server项目的发行版本发布到桌面上的目录中,并将其上传到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();
}
}
我发送的网址请求是: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。
答案 0 :(得分:2)
Netlify是静态文件主机。他们不会在其服务器上运行任何服务器端应用程序,例如.NET Core。
因此,您可以在Netlify上托管Blazor客户端应用程序,但如果要运行服务器端代码,则必须将其托管在其他位置。
如果您正在寻找API的免费托管服务,那么有些云服务提供商提供免费套餐。 Azure拥有免费的App Service,但有一定的限制,Google Cloud拥有免费的微型VPS,可以托管一个小型应用程序,heroku也提供免费的产品。
Digital Ocean,Vultr或Linode的廉价VPS是另一种选择。