【问题标题】:ASP.NET Core api project 3.1 publish on IISASP.NET Core api 项目 3.1 在 IIS 上发布
【发布时间】:2021-04-27 02:09:00
【问题描述】:

我正在尝试使用 Visual Studio 2019 中的 Web 部署功能在我的电脑本地 IIS 服务器中部署我的 ASP.NET Core API 项目。

我可以从本地 IIS 服务器成功调用所有 api。

当我发布到远程服务器并调用 api 时,它显示 HTTP Error 500.30 - ANCM In-Process Start Failure 错误。

  1. 我检查了 applications.json 文件中的无效属性。
  2. 我已经从 https://dotnet.microsoft.com/download/dotnet-core/3.1

api call from web browser

在 ProjectController.cs 中


[HttpGet]
[Route("api/Testing")]
public async Task<IActionResult> GetUserList()
{
    try
    {
        List<PatientName> lstPAtientName = new List<PatientName>();
        lstPAtientName.Add(new PatientName() { PName = "ABC" });
        lstPAtientName.Add(new PatientName() { PName = "XYZ" });

        var dict = new Dictionary<string, object>();
        dict.Add("PatientList", lstPAtientName);

        return Ok(dict);
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

在 Startup.cs 中


public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers().AddNewtonsoftJson();

        //Configure CORS also to make this API enable for other application
        services.AddCors(option => option.AddPolicy("MyBlogPolicy", builder =>
        {
            builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod();
        
        }));

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
        services.AddScoped<ProjectRepository>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        //Configure CORS also to make this API enable for other application
        app.UseCors("MyBlogPolicy");

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }

}

我已设置 stdoutLogEnabled="true" 。网站/日志显示如下。 **

Unhandled exception. System.FormatException: Could not parse the JSON file.
 ---> System.Text.Json.JsonReaderException: 'S' is an invalid escapable character within a JSON string. The string should be correctly escaped. LineNumber: 21 | BytePositionInLine: 61.
   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
   at System.Text.Json.Utf8JsonReader.ConsumeStringAndValidate(ReadOnlySpan`1 data, Int32 idx)
   at System.Text.Json.Utf8JsonReader.ConsumeString()
   at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker)
   at System.Text.Json.Utf8JsonReader.ReadSingleSegment()
   at System.Text.Json.Utf8JsonReader.Read()
   at System.Text.Json.JsonDocument.Parse(ReadOnlySpan`1 utf8JsonSpan, Utf8JsonReader reader, MetadataDb& database, StackRowStack& stack)
   at System.Text.Json.JsonDocument.Parse(ReadOnlyMemory`1 utf8Json, JsonReaderOptions readerOptions, Byte[] extraRentedBytes)
   at System.Text.Json.JsonDocument.Parse(ReadOnlyMemory`1 json, JsonDocumentOptions options)
   at System.Text.Json.JsonDocument.Parse(String json, JsonDocumentOptions options)
   at Microsoft.Extensions.Configuration.Json.JsonConfigurationFileParser.ParseStream(Stream input)
   at Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider.Load(Stream stream)
   --- End of inner exception stack trace ---
   at Microsoft.Extensions.Configuration.Json.JsonConfigurationProvider.Load(Stream stream)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.HandleException(ExceptionDispatchInfo info)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
   at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
   at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
   at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
   at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
   at Website.Program.Main(String[] args) in E:Website\Program.cs:line 12

**

【问题讨论】:

  • 你有多个 appSettings.json 用于不同的环境吗?检查那些。您似乎无法解析某些 JSON 文件。 'S' 是 JSON 字符串中的无效可转义字符。该字符串应正确转义。行号:21
  • 从错误中可以明显看出JSON文件中有字符存在转义问题,在文件的第21行,如果您仍然无法解决问题,请发布您的json文件并我会帮你解决问题的。

标签: c# json .net asp.net-core iis


【解决方案1】:

你添加了吗

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

在您的.csproj 文件中?

在这里查看资源:https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-3.1

【讨论】:

  • 是的,我在 .csproj 文件中添加了 AspNetCoreHostingModel 标签。但它显示相同的错误。还尝试在已发布文件的 program.cs 中添加 .UseIISIntegration()。
  • 能否将您的 appsettings.json 添加到您的问题中?
猜你喜欢
  • 2021-01-30
  • 2018-10-26
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 2021-12-31
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多