【问题标题】:Blazor Webassembly, DatabaseCRUD: Internal Server Error 500 with published versionBlazor Webassembly,DatabaseCRUD:已发布版本的内部服务器错误 500
【发布时间】:2021-06-09 12:26:11
【问题描述】:

问题详情 我有一个带有简单 Database-CRUD(创建、读取、更新、删除)示例的 Blazor 项目。当我在 Visual Studio 中运行它时它可以正常工作,但如果我发布它,程序就会出错。

项目详情 IDE 是 Visual Studio 2019。项目是 Blazor Webassembly。我尝试了 .NET CORE 3.1 和 .NET 5.0。数据库是 SQL Server 2019。用于发布的 IIS。

代码详情 数据库访问正在使用映射 (Scaffold-DbContext)。我使用掘金“Microsoft.EntityFrameworkCore.Tools”和“Microsoft.EntityFrameworkCore.SqlServer”。

这是读取命令:

using var httpResponse = await Http.GetAsync("/api/DataLrs/Index");

这是我用来获取更多错误细节的读取命令-sn-p:

using var httpResponse = await Http.GetAsync("/api/DataLrs/Index");
if (!httpResponse.IsSuccessStatusCode)
{
    // set error message for display, log to console and return
    errorMessage = httpResponse.ReasonPhrase;
    Console.WriteLine($"There was an error! {errorMessage}");
    return;
}
// convert http response data to UsersResponse object
dataLrsList = await httpResponse.Content.ReadFromJsonAsync<DataLrs[]>();

错误详情 当我使用 IIS 发布项目并尝试执行相同的命令时,我在浏览器中收到以下错误: 内部服务器错误 System.Net.Http.HttpRequestException:net_http_message_not_success_statuscode,500

解决方案尝试详情 如前所述,当我在 Visual Studio 中运行它时,它可以正常工作。我已经用谷歌搜索并尝试了一些东西,但没有任何效果。 如何获得更好的错误描述? 有人熟悉这个问题吗? 我意识到很多人都有相同/相似的问题,但我找不到明确的解决方案 谢谢!

【问题讨论】:

  • 您似乎正在使用 EF Core,那么您是否已将数据库内容迁移到已发布的网络服务器上?在本地,数据库通过包管理器控制台进行初始化和更新,但必须将更改迁移到实时 SQL 服务器。我们可能还需要更多信息,例如:您使用的是 localDB 吗?你的连接字符串是什么;你的方法“/api/DataLrs/Index”怎么样?等

标签: c# blazor-webassembly


【解决方案1】:

是的,你是对的,我使用的是 EF Core。对不起!忘了提到那个重要的细节。

数据库详情 为了让它不太复杂,我在我的电脑上使用了一个数据库,我也在我的电脑上发布(IIS)。如果一切正常,我将继续使用服务器。 我通过 Visual Studio 的 SQLServerObjectExplorer 检索了我的连接字符串。我将存储在 appsettings.json 中的相同连接字符串用于两种模式(调试、发布)。 这是连接字符串: 数据源=CND823509T\SQLEXPRESS;初始目录=DataComposerWebDBTest;Integrated Security=True;连接超时=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False

方法详情 这是我的一些方法细节,我将仅复制重要的行(希望就足够了)。我从我用谷歌搜索的一个一般例子中得到了结构。如前所述,它在本地有效。

RazorePage.razor

dataLrsList = await Http.GetFromJsonAsync<DataLrs[]>("/api/DataLrs/Index")

DataLrsAccessLayer.cs

public IEnumerable<DataLrs> GetData()
{
    try
    {
        return _context.DataLrs.ToList();
    }
    catch (Exception ex)
    {
        throw;
    }
}

DataLrsController.cs

[HttpGet]
[Route("api/DataLrs/Index")]
public IEnumerable<DataLrs> Index()
{
    return _dataLrs.GetData();
}

问题详情 您需要更多详细信息吗? 你对 localDB 的东西是什么意思?

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多