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

问题描述 投票:1回答:2

我一直完全按照此链接(https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio)创建我的Web api。

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

但是,一旦将我的Web api部署到azure应用程序服务上,我所有的api链接都向我返回错误404。是否有任何我可能会错过的路由?

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

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

在每个功能中,我都添加了此

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

至于我的程序/启动程序,它与本教程完全相同

  1. 程序类

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

    让我知道是否需要更多信息。非常感谢您的帮助!

asp.net azure asp.net-web-api asp.net-core-2.1 asp.net-web-api-routing
2个回答
2
投票

如下设置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。这是Publish an ASP.NET Core Web API to an Azure App Services Web App,您可以关注。


0
投票

我知道答案已经帮助您解决了问题。但是我遇到了类似的情况。就我而言,我的api已启动并正在运行,但是当我导航至https://api.mydomain.com时希望看到的Swagger页面向我显示未找到错误404,这使我认为该应用程序无法正常工作。

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

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

[这几乎是我所做的,使我认为应用程序服务无法正常工作。哪个事实效果很好。

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页面仅在测试或开发环境中而不在生产环境中显示。但是我里面的人希望能看到并显示大张旗鼓的页面。

我希望这也能帮助处于我这种情况的任何人。

© www.soinside.com 2019 - 2024. All rights reserved.