404 部署 asp.net 核心托管 blazor webassembly 到 Netlify
404 Deploying asp.net core hosted blazor webassembly to Netlify
我正在尝试将 asp.net 核心托管 blazor webassembly 应用程序部署到 Netlify。我已经将Server项目的release版本发布到我桌面的一个目录,并上传到github。我将 Netlify 的发布目录设置为 wwwroot,该站点确实呈现得很好。但是,如果我尝试调用 api 控制器,它会 returns 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。
Netlify 是静态文件主机。他们没有 运行 任何服务器端应用程序,例如他们服务器上的 .NET 核心。
因此您可以在 Netlify 上托管 Blazor 客户端应用程序,但如果您希望服务器端代码 运行 您必须将其托管在其他地方。
如果您正在为您的 API 寻找免费托管服务,有些云提供商提供免费套餐。 Azure 有一些限制的免费应用程序服务,Google 云有一个免费的微型 VPS 可以托管一个小应用程序,heroku 也有一个免费产品。
来自 Digital Ocean、Vultr 或 Linode 的廉价 VPS 是另一种选择。
我正在尝试将 asp.net 核心托管 blazor webassembly 应用程序部署到 Netlify。我已经将Server项目的release版本发布到我桌面的一个目录,并上传到github。我将 Netlify 的发布目录设置为 wwwroot,该站点确实呈现得很好。但是,如果我尝试调用 api 控制器,它会 returns 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。
Netlify 是静态文件主机。他们没有 运行 任何服务器端应用程序,例如他们服务器上的 .NET 核心。
因此您可以在 Netlify 上托管 Blazor 客户端应用程序,但如果您希望服务器端代码 运行 您必须将其托管在其他地方。
如果您正在为您的 API 寻找免费托管服务,有些云提供商提供免费套餐。 Azure 有一些限制的免费应用程序服务,Google 云有一个免费的微型 VPS 可以托管一个小应用程序,heroku 也有一个免费产品。
来自 Digital Ocean、Vultr 或 Linode 的廉价 VPS 是另一种选择。