ASP.NET Core api 项目 3.1 在 IIS 上发布

Posted

技术标签:

【中文标题】ASP.NET Core api 项目 3.1 在 IIS 上发布【英文标题】:ASP.NET Core api project 3.1 publish on 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 错误。

    我检查了 applications.json 文件中的无效属性。 我已经从 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文件并我会帮你解决问题的。 【参考方案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 添加到您的问题中?

以上是关于ASP.NET Core api 项目 3.1 在 IIS 上发布的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 / 5 WeatherForecast 示例 Web API 项目引发错误 404

在 ASP.NET Core 3.1 中上传和下载大文件?

Blazor ASP.Net Core 3.1 Web API 在发布时返回 404 错误

ASP.NET Core 3.1 Web API(版本控制)和 Swagger UI 在发布到 Azure 后由于 MvcJsonOptions 而失败

Wcf 服务在 .NET Core 3.1 控制台应用程序中工作,但在 ASP.NET Core 3.1 Web API 中无法工作

ASP.Net Core 3.1 - Web API 中的 Post 参数始终为 NULL