Я создал очень минималистичный веб-интерфейс, используя Код 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 не является полным.Какие-либо предложения ?
Ниже приведен скриншот дерева моего проекта.
РЕШЕНИЕ
Наконец-то все заработало.Просто выполните в терминале dotnet publish -c Release -o ./publish
, затем щелкните правой кнопкой мыши папку публикации и Deploy to web app
Я не знаю, почему я не могу просто развернуть ее с помощью кнопки Deploy
в расширении.