Ich habe eine REST-API mit ASP.NET-Web-API, Entity Framework und einer in Microsoft Azure gehosteten SQL-Datenbank erstellt. Ich habe die erste Code-Migration verwendet. HierASP.NET-Web-API-Servercode stellt eine Verbindung zur Datenbank bei lokaler Ausführung her, aber nicht bei gehostetem Azure
ist die User-Modell Klasse
namespace Trivio.Models
{
public partial class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
}
DbContext unter Trivio.Models.ApplicationDbContext.cs definiert
namespace Trivio.Models
{
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<User> UserInformation { get; set; }
public DbSet<Trivia> Trivia { get; set; }
public DbSet<TriviaHistoryModel> TriviaHistoryModel { get; set; }
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
}
Zuerst habe ich Migrationen erstellt, lokal auf einem LocalDB. Dann habe ich meinen Servercode auf Azure aktualisiert und die ersten Code-Migrationen aktiviert. Ich weiß, dass dies funktioniert, weil meine Azure SQL-Datenbank mit korrekten Daten gefüllt ist. Um zu testen, ob meine Datenbank korrekt gehostet wurde, habe ich den connectionString aktualisiert, um eine Verbindung mit der Azure SQL-Datenbank herzustellen.
Hier ist die Verbindungszeichenfolge unter "Web.config". (Ich habe ersetzt Passwort und Benutzernamen mit Dummy-Daten)
<connectionStrings>
<add name="DefaultConnection" connectionString="Server=tcp:trivioserver.database.windows.net,1433;Initial Catalog=Trivio;Persist Security Info=False;User ID={mycorrectusername};Password={mypassword};MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>
</connectionStrings>
Meine User-API-Controller unter Trivio.Controllers.UserController.cs:
namespace Trivio.Controllers
{
[RoutePrefix("Trivia")]
public class UserController : ApiController
{
private ApplicationDbContext _context;
public UserController()
{
_context = new ApplicationDbContext();
}
//------------Routes---------------------------------------------
//Return List of Users
[HttpGet]
[Route("Users")]
public IEnumerable<User> GetUsers()
{
return _context.UserInformation.ToList();
}
}
}
Hier ist, wo das Problem auftritt. Wenn ich den Code auf meinem lokalen Server ausführe und einen GET-Aufruf an localserver/Trivia/Users mache, wird die korrekte Liste der Benutzer aus meiner Azure SQL-Datenbank zurückgegeben.
Nach der Veröffentlichung in Azure gibt der exakt gleiche Code jedoch eine leere Benutzerliste zurück. Ich habe einen GET-Aufruf an http: // {myappname} .azurewebsites.net/Trivia/Users gemacht.
<ArrayOfUser xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Trivio.Models"/>
ich den Code kennen gehostet wird korrekt, weil HTML-Code geladen wird.
Mein ServiceConfigurationCloud Datei unter Trivio.Azure
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="Trivio.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="Trivio">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.
" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
</Role>
</ServiceConfiguration>
Ich weiß, dass die Datenbank nicht leer ist, weil ich es manuell überprüft und der lokalen Informationen korrekt zu derselben Datenbank kehrt verbunden Servercode.
Ich wette, wenn Sie hinzufügen, Protokollierung (Theres eine Möglichkeit, es über azur ui + Tabellen-Speicher einzurichten), Sie werden sehen, dass es keine 0 Ergebnisse zurückgibt, aber in der Tat Fehler ausgibt und den Fehler nicht öffentlich anzeigt. –