ASP.NET Core Web API работает локально, но не в службе приложений Azure.
Я точно перешел по этой ссылке ( https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio), чтобы создать свой веб-интерфейс,
** Локально работает нормально. Протестировал ссылки и вернул данные JSON
Однако после развертывания моего веб-API до службы приложений Azure все мои API-ссылки возвращают мне ошибку 404. Есть ли что-то, что я мог упустить из-за маршрутизации?
В моем контроллере я добавил это в мою голову.
[Route("api/xxx")]
[ApiController]
В каждой функции я добавил это
[HttpPut("xxx/{Id}")]
Что касается моей программы / запуска, она полностью совпадает с руководством
Программный класс
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseMvc(); }
Дайте мне знать, если вам нужна дополнительная информация. Действительно ценю любую помощь, спасибо!
1 ответ
Настройка web.config
как показано ниже:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Somerandomname.WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>
Для более подробной информации, вы можете обратиться к этой статье. А вот публикация основного веб-API ASP.NET в веб-приложении служб приложений Azure, которому вы можете следовать.
Я знаю, что ответ помог вам решить вашу проблему. Но я столкнулся с похожей ситуацией. В моем случае мой api запущен и работает, но страница Swagger, которую я ожидал увидеть, когда я перехожу на https://api.mydomain.com/, показывает мне ошибку 404 not found, что заставило меня предположить, что приложение не работает.
После нескольких часов настройки и включения отладки службы приложений Azure и включения и выключения потоковой передачи журналов. Я заметил, что задания с зависанием в моем приложении запускались и работали.
Поэтому я вернулся, чтобы проверить свой код.
И вот примерно то, что я сделал, заставило меня предположить, что служба приложения не работает. Что на самом деле работало очень хорошо.
Startup.cs
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, UserManager<AppUser> userManager,
RoleManager<IdentityRole> roleManager)
{
//Stripped Down for readability purpose
app.UseSwagger();
if (!env.IsProduction())
{
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample API V1");
c.RoutePrefix = string.Empty;
});
}
if (!env.IsProduction())
{
app.UseHangfireDashboard();
}
else
{
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
Authorization = new[] { new HangfireAuthorizationFilter() }
});
}
app.UseHangfireServer();
}
Итак, в моем случае именно эта строка заставила службу приложения вернуть ошибку 404.
app.UseSwagger();
if (!env.IsProduction())
{
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample API V1");
c.RoutePrefix = string.Empty;
});
}
Потому что я хочу, чтобы страница Swagger отображалась только в среде тестирования или разработки, а не в рабочей среде. Но человеческое существо во мне ожидало, что страница чванства появится и отобразится.
Я надеюсь, что это поможет и всем, кто находится в моей ситуации.
Я предполагаю, что ваша маршрутизация не выполнена. Попробуйте использовать свой URL + / api / xxx.
Пример: https://xxxx.azurewebsites.net/api/xxx
Здесь https://xxxx.azurewebsites.net/ - это ваш лазерный URL-адрес, а api / xxx - это ваш URL-адрес запуска, определенный в файле launchSettings.json, например "launchUrl": "api / xxx /",
[Route("api / [controller]")] должен быть в вашем классе контроллера.
Он должен работать.