Ядро Asp.net: вызов веб-API возвращает 500

Я новичок в основном приложении asp.net.

У меня есть основное приложение asp.net, которое использует шаблон репозитория. Он имеет контроллер API с именем ApplicationsAPIController.

ApplicationsAPIController имеет метод GetApplications, который возвращает все приложения.

У меня есть приложение, опубликованное на удаленном сервере. При вызове API GetApplications из почтальона выдает внутреннюю ошибку сервера 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 выше отлично работает в среде разработки (локально).

Что касается ошибки, я думаю, что мне нужно настроить промежуточную или производственную среду. Но я не смог найти хорошего и пошагового документа для настройки. Я пробовал это многими способами, но потерпел неудачу.


comment
если вы получаете доступ к API локально из удаленного блока, вы можете увидеть другое сообщение об ошибке, чтобы вы могли начать устранение неполадок. Также проверьте журнал событий приложений в окнах на удаленном сервере, чтобы увидеть какие-либо ошибки, записанные там (потенциально).   -  person Mike D    schedule 09.09.2016


Ответы (2)


Ошибка 500 означает, что в вашем коде возникла проблема, а не в том, что вы забыли назначить правильную среду. Что вам нужно сделать, так это посмотреть, в чем была фактическая ошибка. У вас есть много вариантов, из которых, возможно, самым быстрым будет включение ошибок среды разработки (рассмотрите возможность временного добавления app.UseDeveloperExceptionPage(); или настройки среды как «DEV»). Более надежным подходом было бы добавление некоторой обработки ошибок приложения и ведения журнала (см. раздел «Фильтры исключений»).

person G. Stoynev    schedule 09.09.2016

Я думаю, вам нужно включить CORS в WebAPI.

Здесь есть детские шаги, чтобы включить. После включения у меня была ошибка 500 to. 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. Я рекомендую прочитать Microsoft Docs о CORS. https://docs.microsoft.com/pt-br/aspnet/core/security/cors?view=aspnetcore-2.2

Чтобы устранить ошибку 500, я вижу эту тему. Я использовал конфигурацию вопроса и решил свою проблему. Получение ошибки CORS * только* при исключении сервера, вызывающем ASP.NET Core Web API из 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();
}
person Willimar    schedule 08.05.2019
comment
Ссылка на решение приветствуется, но убедитесь, что ваш ответ полезен и без нее: добавьте контекст вокруг ссылки, чтобы другие пользователи иметь некоторое представление о том, что это такое и почему оно там, а затем процитировать наиболее релевантную часть страницы, на которую вы ссылаетесь, в случае, если целевая страница недоступна. Ответы, которые представляют собой не более чем ссылку, могут быть удалены. - person double-beep; 10.05.2019