Невозможно открыть веб-API, опубликованный в Azure. - PullRequest
0 голосов
/ 30 апреля 2019

Я создал очень минималистичный веб-интерфейс, используя Код Visual Studio для развертывания в Azure для тестирования.Контроллер API просто возвращает OK на URL http://localhost:5000/api/test

. Он хорошо работает на моем локальном компьютере (с использованием отладчика для расширения Chrome).При публикации в Azure (с использованием расширения службы приложений Azure) публикация завершается успешно, но при просмотре https://testapi30.azurewebsites.net/api/test я получил You do not have permission to view this directory or page.

Затем я активировал журналы диагностики для этого приложения Azure и вижу это:

Веб-сервер настроен так, чтобы не перечислять содержимое этого каталога.Наиболее вероятные причины: документ по умолчанию не настроен для запрошенного URL-адреса, и просмотр каталога не включен на сервере.Вещи, которые вы можете попробовать: Если вы не хотите включать просмотр каталогов, убедитесь, что документ по умолчанию настроен и файл существует.Включить просмотр каталогов с помощью диспетчера IIS.Дополнительные сведения. Эта ошибка возникает, когда документ не указан в URL-адресе, документ по умолчанию не указан для веб-сайта или приложения, а список каталогов не включен для веб-сайта или приложения.Этот параметр может быть отключен специально для защиты содержимого сервера.

Я не понял, почему у меня есть эта проблема только в Azure, а не локально.Почему необходимо иметь документ по умолчанию, когда я пытаюсь нажать определенно https://testapi30.azurewebsites.net/api/test

Мой вопрос: что не так с моим кодом, показанным ниже?Что мне нужно сделать, чтобы мой веб-API работал в Azure?

api.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="2.2.0" />
  </ItemGroup>

</Project>

web.config

<configuration> 

    <system.web>
        <customErrors mode="Off" />
        <authentication mode="None" />
    </system.web>

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
        <httpErrors errorMode="Detailed"></httpErrors>
    </system.webServer> 

</configuration>

Program.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace API
{
    public class Program
    {
        public static void Main(string[] args)
        {
            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .Build();
    }
}

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors.Infrastructure;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;

namespace API
{
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public IConfigurationRoot Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(); 
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseMvc();
        }
    }
}

TestController.cs

using System;
using Microsoft.AspNetCore.Mvc;

namespace API.Controllers
{
    [Route("api/[controller]")]
    public class TestController : Controller
    {
        [HttpGet]
        public IActionResult Get()
        {
            return Content("OK");
        }

    }
}

ОБНОВЛЕНИЕ

Ниже приведены журналы трассировки:

Как я вижу в журналах, доступ к пути home\site\wwwroot\ проблематично.У меня нет wwwroot в моем проекте, потому что это веб-API.Может быть, мой web.config не является полным.Какие-либо предложения ?

enter image description here

enter image description here

Ниже приведен скриншот дерева моего проекта.

enter image description here

РЕШЕНИЕ

Наконец-то все заработало.Просто выполните в терминале dotnet publish -c Release -o ./publish, затем щелкните правой кнопкой мыши папку публикации и Deploy to web app

Я не знаю, почему я не могу просто развернуть ее с помощью кнопки Deploy в расширении.

enter image description here

1 Ответ

0 голосов
/ 01 мая 2019

Наконец-то все заработало.Просто выполните в терминале dotnet publish -c Release -o ./publish, затем щелкните правой кнопкой мыши папку публикации и разверните в веб-приложении.

Я не знаю, почему я не могу просто развернуть его с помощью кнопки Deploy врасширение.

...