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

时间:2019-02-04 11:52:06

标签: asp.net azure asp.net-web-api asp.net-core-2.1 asp.net-web-api-routing

我一直完全按照此链接(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();
    }
    

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

3 个答案:

答案 0 :(得分: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,您可以关注。

答案 1 :(得分:2)

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

经过几个小时的调整和打开azure应用服务调试以及日志流的打开和关闭。我注意到我的应用程序中的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页面。但是我里面的人希望能看到并显示大张旗鼓的页面。

我希望这也会对处于我这种情况的所有人有所帮助。

答案 2 :(得分:1)

我想您的路由尚未完成。请尝试使用 Url + / api / xxx

示例:https://xxxx.azurewebsites.net/api/xxx

此处 https://xxxx.azurewebsites.net 是您的azure网址,而 api / xxx 是您在launchSettings.json文件(例如“ launchUrl”)中定义的启动网址:“ api / xxx /”,

[Route(“ api / [controller]”))]应该在您的控制器类中。

应该可以。