ASP.NET Core Web API 在本地运行,但不在 Azure 应用服务上运行

ASP.NET Core Web API runs locally but not on Azure app service

我一直在严格按照这个 link (https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio) 创建我的网站 api。

**在本地,它工作正常。测试了 links,它返回了 JSON 数据

但是,一旦我将我的网络 api 部署到 azure 应用程序服务,我所有的 api link 都会返回错误 404。有什么我可能有的吗错过了路由?

在我的控制器中,我已将其添加到我的头上。

[Route("api/xxx")]
[ApiController]

在每个函数中,我都添加了这个

[HttpPut("xxx/{Id}")]

至于我的program/startup和教程完全一样

  1. 计划class

    public class Program
    {
       public static void Main(string[] args)
       {
            CreateWebHostBuilder(args).Build().Run();
        }
    
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();
    }
    
  2. 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();
    }
    

    如果您需要更多信息,请告诉我。 非常感谢任何帮助谢谢!

设置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>

更多细节,你可以参考这篇article. And here is Publish an ASP.NET Core Web API to an Azure App Services Web App你可以关注

我知道答案已经帮助您解决了问题。但是我遇到了类似的情况。在我的例子中,我的 api 已经启动并且 运行 但是当我导航到 https://api.mydomain.com 时我期望看到的 Swagger 页面显示错误 404 未找到,这让我假设应用程序不工作。

经过几个小时的调整和打开和关闭 azure 应用程序服务调试和日志流。我注意到我的应用程序中的 hangfire 作业正在启动和工作。

所以我回去检查我的代码。

这几乎是我所做的让我认为应用程序服务无法正常工作的事情。哪个 infact 工作得很好。

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();
      }

所以,在我的例子中,正是这一行导致应用程序服务 return 错误 404

app.UseSwagger();
           if (!env.IsProduction())
           {
                app.UseSwaggerUI(c =>
                {
                     c.SwaggerEndpoint("/swagger/v1/swagger.json", "Sample API V1");
                     c.RoutePrefix = string.Empty;
                });
           }

因为我只想在测试或开发环境中显示 Swagger 页面,而不是在生产环境中显示。但是我内心的人期待着 swagger 页面出现并显示。

我希望这对任何和我一样的人都有帮助。

我猜你的路由不是 done.try 你的 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]")] 应该在你的控制器中 class.

应该可以。