Я пытался развернуть приложение веб-сборки Blazor, размещенное на ядре asp.net, в Службе приложений Azure, однако у меня возникают проблемы с работой API. Когда я пытаюсь сохранить данные пользователя в базе данных, я получаю ошибку 400 неверного запроса. Он отлично работает на локальном хосте. Я осмотрелся и нашел совет, в котором предлагалось использовать поток журнала в Azure, чтобы получить более подробное сообщение об ошибке, и вот оно, хотя я не уверен, что подробности действительно помогают.
2020-06-22 22:24:54 MYPROJECT POST /api/Register/Post X-ARR-LOG-ID=ef27263e-dead-417a-b136-89a217a6f931 443 - MYIP Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/83.0.4103.97+Safari/537.36 ARRAffinity=7f74b113b9ae575a087ae1fa07a63858e6e34f27224b7aa1a957b06074e65ffd https://myproject.azurewebsites.net/Register
Вот соответствующий код приложения:
//Register.razor in client project
@code {
private RegisterModel Model = new RegisterModel();
private bool ShowErrors;
private List<string> Errors = new List<string>();
private async Task HandleValidSubmit()
{
ShowErrors = false;
Errors.Clear();
if (Model.Password.Length >= 6 && Model.Password == Model.ConfirmPassword)
{
await HttpClient.PostAsJsonAsync<RegisterModel>("api/Register/Post", Model);
NavigationManager.NavigateTo("/");
}
else
{
if (Model.Password.Length > 100 || Model.Password.Length < 6)
{
Errors.Add("Password must be between 6 and 100 characters in length.");
}
if (Model.Password != Model.ConfirmPassword)
{
Errors.Add("Passwords do not match.");
}
ShowErrors = true;
}
}
}
//RegisterController.cs in server project
[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();
}
}
//Startup.cs in Server project
public void ConfigureServices(IServiceCollection services)
services.AddDbContext<UserContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("UsersConnection"),
sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.EnableRetryOnFailure();
}));
При публикации проекта я настроил базу данных SQL Azure для «пользователей», установил флажки для использования строки UsersConnection во время выполнения и применил миграцию UserContext Entity Framework при публикации.
Я использую Visual Studio 2019, целевая платформа - netcoreapp3.1. Буду признателен за любое руководство. Спасибо!
Изменить
Посмотрев подробные журналы, очевидно, что база данных даже не создается?
INSERT INTO [Users] ([Email], [Password])
VALUES (@p0, @p1);
2020-06-22 22:19:47.208 +00:00 [Error] Microsoft.EntityFrameworkCore.Update: An exception occurred in the database while saving changes for context type 'BlazorTodos.Server.Data.UserContext'.
Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
---> Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'Users'.
Debug
mode вместоPublish
. За подробностями обращайтесь к официальной документации. - person Jason Pan   schedule 23.06.2020X-ARR-LOG-ID
. stackoverflow.com/questions/34858334/azure-http-log-explained < / а> - person Jason Pan   schedule 24.06.2020Debug
неRelease
при публикации приложения. - person Jason Pan   schedule 24.06.2020