Asp.net核心:调用web api返回500

时间:2016-09-09 12:06:30

标签: asp.net environment-variables development-environment asp.net-core-1.0 asp.net-core-webapi

我是asp.net核心应用程序的新手。

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

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

我已将应用发布到远程服务器。从邮递员调用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在开发环境(本地)中完美运行。

根据错误,我认为我必须设置一个临时或生产环境。但我找不到任何好的和一步一步的文件来设置。我尝试了很多方法,但失败了。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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 make

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

您的方法配置使用:

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

将允许所有人访问您的API,我建议阅读有关CORS的Microsoft文档。 https://docs.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();
}