Я создал REST API с использованием ASP.NET Web API, Entity Framework и базы данных SQL, размещенной на Microsoft Azure. Я использовал первую миграцию кода.Код сервера ASP.NET Web API подключается к базе данных при запуске локально, но не при размещении на Azure
Вот класс User Model
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 определено в Trivio.Models.ApplicationDbContext.cs
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();
}
}
}
Сначала я создал миграции, локально на LocalDB. Затем я обновил код сервера до Azure и включил первые миграции кода. Я знаю, что это работает, потому что моя база данных Azure SQL заполнена правильными данными. Чтобы проверить правильность размещения моей базы данных, я обновил connectionString для подключения к базе данных Azure SQL.
Вот строка подключения в Web.config. (Я заменил имя пользователя и пароль с фиктивными данными)
<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>
Мой контроллер API пользователя, под 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();
}
}
}
Вот где возникает проблема. Когда я запускаю код на локальном сервере и делаю вызов GET для локального сервера/Trivia/Users, возвращается правильный список пользователей из моей базы данных Azure SQL.
Однако, после публикации в Azure, тот же самый код возвращает пустой список пользователей. Я сделал GET-вызов для http: // {myappname} .azurewebsites.net/Trivia/Users.
<ArrayOfUser xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Trivio.Models"/>
Я знаю код правильно организовано, потому что загружается HTML-код.
Мой ServiceConfigurationCloud файл под 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>
Я знаю, что база данных не является пустым, потому что я вручную проверил его и локальный код сервера, связанный с той же базы данных возвращает правильную информацию.
Держу пари, если вы добавляете вход (Theres способ установить его с помощью лазурного щ + хранения таблицы), вы увидите, что он не возвращает 0 результатов, но на самом деле является ошибкой и просто не показывает ошибку публично. –