我使用ASP.NET Web API,实体框架和Microsoft Azure上托管的SQL数据库创建了一个REST API。我使用Code首次迁移。
这是用户模型类
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; }
}
}
在Trivio.Models.ApplicationDbContext.cs
下定义的DbContextnamespace 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>
我在Trivio.Controllers.UserController.cs下的用户API控制器:
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();
}
}
}
问题出现在哪里。当我在本地服务器上运行代码并对localserver / Trivia / Users进行GET调用时,将返回来自Azure SQL数据库的正确用户列表。
但是,在发布到Azure之后,完全相同的代码会返回一个空的Users列表。我打电话给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代码。
Trivio.Azure下的我的ServiceConfigurationCloud文件
<?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>
我知道数据库不是空的,因为我手动检查了它,并且连接到同一数据库的本地服务器代码返回了正确的信息。
答案 0 :(得分:1)
我和Steve G在一起。我认为识别/解决此问题的简单方法是使用远程调试器并检查错误:
https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-dotnet-troubleshoot-visual-studio