404 Развертывание размещенной на ядре asp.net веб-сборки Blazor в Netlify

Я пытаюсь развернуть приложение веб-сборки Blazor, размещенное на ядре asp.net, в 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();
        }
    }

Я отправляю запрос URL: https://(NetlifyDefaultDomain)/api/Register/Post . Однако я получаю ответ 404. На localhost все работает нормально. Я предполагаю, что есть параметр, который мне нужно где-то изменить, чтобы 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.


person amdorsey12    schedule 14.06.2020    source источник
comment
Хорошо, я включил Program.cs. Это из-за моего BaseAddress? Прямо сейчас я просмотрел свой файл index.html, и базовый href был /   -  person amdorsey12    schedule 14.06.2020
comment
Вы пытаетесь разместить свои контроллеры / API на Netlify? ты не можешь этого сделать. Netlify не запускает основной код dotnet на ИТ-серверах   -  person Rosco    schedule 15.06.2020
comment
О, круто. Есть ли какое-то решение для этого?   -  person amdorsey12    schedule 15.06.2020


Ответы (1)


Netlify - это статический файловый хост. Они не запускают на своих серверах никаких серверных приложений, таких как ядро ​​.NET.

Таким образом, вы можете разместить свое клиентское приложение Blazor на Netlify, но если вы хотите, чтобы код на стороне сервера запускался, вы должны разместить его где-то еще.

Если вы ищете бесплатный хостинг для своего API, есть несколько облачных провайдеров, у которых есть бесплатный уровень. В Azure есть бесплатная служба приложений с некоторыми ограничениями, в облаке Google есть бесплатный микро-VPS, на котором можно разместить небольшое приложение, у heroku также есть бесплатное предложение.

Еще одна альтернатива - дешевый VPS от Digital Ocean, Vultr или Linode.

person Rosco    schedule 15.06.2020
comment
Спасибо! Я посмотрю на это - person amdorsey12; 16.06.2020