我一直完全按照此链接(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}")]
对于我的程序/启动程序,它与教程完全相同
程序类
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();
}
让我知道是否需要更多信息。 非常感谢您的帮助!
答案 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]”))]应该在您的控制器类中。
应该可以。