Azure中的ASP.NET Core 1.1路由

时间:2018-05-16 13:16:54

标签: c# azure .net-core azure-web-app-service .net-core-1.1

App(web api)在本地工作正常。但在azure(App Service)请求中,http://myapp.azurewebsites.net/api/values返回错误404(您要查找的资源已被删除,其名称已更改,或暂时不可用。)路由正在寻找物理路径D:\ home \ site \ wwwroot \ api \ values不存在。

在program.cs中:

var host = new WebHostBuilder()
            .UseKestrel()
            .UseUrls("http://myapp.azurewebsites.net")
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();

在startup.cs中:

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddMvcCore(opts =>
         {
              opts.ModelBinderProviders.Insert(0, new CommaDelimitedArrayModelBinderProvider());
          });
    ...
}

的web.config:

<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="flase" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>

更新 error details

更新2: 子错误代码为0(sc-substatus)。 sc-win32-status为2(找不到文件)。 我还启用了所有日志,查看了它们,但没有找到任何其他提示。 Kudu远程执行控制台根本没有显示任何错误和请求证据。 iis error

更新3: api的简短版本https://drive.google.com/open?id=1TUCImJSmuCC1HJK-x95wg5VOUUEB96wZ

3 个答案:

答案 0 :(得分:0)

404错误有很多子状态代码,要缩小查找子状态代码,可以查看失败请求跟踪日志。

确保部署文件在wwwroot文件夹中可用。将web.config文件放在/ site / wwwroot目录下。

默认情况下,在Azure WebApps上,所有文件都与应用程序一起存储在文件系统中,包括媒体文件。请参阅文章文件结构在天蓝色 - https://github.com/projectkudu/kudu/wiki/File-structure-on-azure以了解文件集和&amp; Azure WebApp上的dirs。

要在Azure门户中启用诊断,请转到Web应用程序页面,然后单击设置&gt;诊断日志。

此外,许多启动错误都不会在应用程序事件日志中产生有用的信息。您可以在Kudu远程执行控制台中运行该应用程序以发现错误:查看本文档中提到的步骤:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/azure-apps/troubleshoot?view=aspnetcore-2.0#run-the-app-in-the-kudu-console

参考:https://docs.microsoft.com/en-us/azure/app-service/web-sites-enable-diagnostic-log

答案 1 :(得分:0)

我添加了一个custom DateTime Model Binding in Core Web API,它在API中绑定了自定义DateTime格式。 我在本地和天蓝色都工作得很好。

你可以去link查看。并使用此link格式化日期时间。 enter image description here

正如@Ajay所说,你可以在天蓝色的门户网站enable diagnostics log

此外,您可以删除KUDU中的所有文件,让webapp将文件重写到其中。

或者,当您发布应用时,请点击“删除目的地的其他文件”以避免您进行一些更改但不会覆盖。 enter image description here

答案 2 :(得分:0)

项目在vs2015中创建,然后迁移到vs2017。显然,并非所有必要的更改都在csproj文件中进行。从头开始重写后,问题就解决了。我也迁移到了.net 2.0。 csproj的最终版本:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RootNamespace>ClearIt.Api</RootNamespace>
    <ApplicationIcon />
    <OutputType>Exe</OutputType>
    <StartupObject />
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\Dal\Dal.csproj" />
    <ProjectReference Include="..\Models\Models.csproj" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
    <PackageReference Include="AutoMapper" Version="6.0.2" />
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="2.0.1" />
    <PackageReference Include="HtmlAgilityPack" Version="1.8.1" />
    <PackageReference Include="IdentityServer4.AccessTokenValidation" Version="2.0.0" />
    <PackageReference Include="Joonasw.AspNetCore.SecurityHeaders" Version="2.4.0" />
    <PackageReference Include="Microsoft.AspNetCore.Cors" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="2.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.0.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.0.0" />
    <PackageReference Include="SkiaSharp" Version="1.59.1" />
    <PackageReference Include="System.Text.Encoding.CodePages" Version="4.4.0" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
  </ItemGroup>
  <ItemGroup>
    <None Update="appsettings.Development.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="appsettings.Production.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="Settings.job">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
    <None Update="web.config">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>