Asp.net core:调用 Web API 返回 500

3

我刚接触asp.net core应用程序。

我有一个使用存储库模式的asp.net core应用程序。它有一个名为ApplicationsAPIController的api控制器。

ApplicationsAPIController有一个GetApplications方法,返回所有应用程序。

我将应用程序发布到远程服务器。在从postman调用GetApplications api时,会抛出500内部服务器错误,响应是以下HTML:

<h1 class="text-danger">Error.</h1>
<h2 class="text-danger">An error occurred while processing your request. </h2>
<h3>Development Mode</h3>
<p>
    Swapping to 
    <strong>Development</strong> environment will display more detailed  information about the error that occurred.
</p>
<p>
    <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the
    <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to
    <strong>Development</strong>, and restarting the application.
</p>

注意:上述API在开发环境(本地)中完美运行。
根据错误提示,我认为我需要设置一个暂存或生产环境。但我找不到任何好的、逐步说明的文件来进行设置。我已经尝试了很多方法,但都失败了。

如果您从远程服务器访问API,可能会返回不同的错误消息,因此您可以开始进行故障排除。同时,请检查远程服务器上的Windows应用程序事件日志以查看是否记录了任何错误(可能性)。 - Mike D
2个回答

3

500错误意味着您的代码遇到了问题,而不是您忘记了分配正确的环境。您需要做的是查看实际错误是什么。您有多种选择,其中最快的可能是启用开发环境错误(考虑临时添加 app.UseDeveloperExceptionPage(); 或将环境设置为 "DEV")。更强大的方法是添加一些应用程序错误处理和日志记录(请查看异常过滤器主题)。


0

我认为你需要在WebAPI中启用CORS。

这里有一些启用的入门步骤。启用后,我也遇到了500错误。 https://developer.okta.com/blog/2018/04/26/build-crud-app-aspnetcore-angular#run-and-test-with-fiddler-or-postman

下面的示例是启用的,但不安全。

在Startup.cs中的ConfigureService中进行设置。

services.AddCors(options =>
{
    options.AddPolicy("CorsPolicy",
        builder => builder.AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader()
            .AllowCredentials());
});

你的Configure方法使用:

app.UseCors("CorsPolicy");
app.UseMvc();

允许所有人访问您的API,我建议阅读有关CORS的Microsoft文档。 https://learn.microsoft.com/pt-br/aspnet/core/security/cors?view=aspnetcore-2.2

为了解决错误500,我看到了这个主题。我使用了问题中的配置,并解决了我的问题。 Getting CORS error *only* on server exception calling ASP.NET Core Web API from Angular 6

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(o => o.AddPolicy("AllowAllPolicy", builder =>
    {
        builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
    }));

    services.AddMvc();
    services.AddOptions();
    services.Configure<AppConfig>(Configuration.GetSection("AppConfig"));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseCors("AllowAllPolicy");

    app.UseMvc();
}

欢迎提供解决方案的链接,但请确保您的答案即使没有链接也是有用的:在链接周围添加上下文,以便其他用户了解它的内容和原因,然后引用您链接的页面中最相关的部分,以防目标页面不可用。仅仅提供链接的答案可能会被删除 - double-beep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接