c# - .NET Core API fungerar inte efter att ha distribuerats på Azure
Jag har en enkel .net core web API med en Angular-app på klientsidan.
När jag anropar mitt API lokalt (http://localhost:5000/api/auth/register) fungerar det utan några problem. Efter att ha distribuerat appen till Azure och anropat den (https://myapp.azurewebsites.net/api/auth/register) får jag ett 400 Bad Request-fel utan något meddelande.
Jag försökte konfigurera app-tjänsten och SQL-servern på Azure-portalen, men jag är inte säker på vad jag borde ändra.
AuthController.cs
[HttpPost("register")]
public async Task<IActionResult> Register(UserToRegisterDto userToRegister)
{
if (await AuthService.UserExists(userToRegister.UserName))
{
return BadRequest("Username already exists");
}
var userToCreate = new User() { UserName = userToRegister.UserName };
await AuthService.Register(userToCreate, userToRegister.Password);
// TODO: Change to return CreatedAtRoute
return StatusCode(201);
}
AuthService.cs
public async Task<User> Register(User user, string password)
{
GenerateHashedPassword(user, password);
await usersRepository.Create(user);
return user;
}
auth.service.ts
private baseUrl = environment.apiUrl + 'auth/';
public register(userToRegister: UserToRegister) {
return this.http.post(this.baseUrl + 'register', userToRegister);
}
miljö.ts
export const environment = {
production: false,
apiUrl: 'http://localhost:5000/api/'
};
miljö.prod.ts
export const environment = {
production: true,
apiUrl: 'api/'
};
Svar #1
Kontrollera först din logg i din Azure-webbapp, det skulle finnas logg när du får åtkomst till din webbapp
Andra kontrollen av undantagsfångst i din Azure-webbapp, eventuella undantag som uppstår kommer att fångas med statuskod och detaljer
Försök äntligen att ändra din API-URL så här. Men jag tror inte att felet kommer från denna inställning
export const environment = {
production: true,
apiUrl: 'https://myapp.azurewebsites.net/api/'
};
Uppdatera för att automatiskt köra migrering när du distribuerar ny version i Azure Web App kan du lägga till dessa kodsnuttar
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MyDbContext>(...);
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
UpdateDatabase(app);
...
}
private static void UpdateDatabase(IApplicationBuilder app)
{
using (var serviceScope = app.ApplicationServices
.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
using (var context = serviceScope.ServiceProvider.GetService<MyDbContext>())
{
context.Database.Migrate();
}
}
}
}
