Так что я столкнулся с очень странной проблемой создания простого шаблона WebAPI с использованием .NET Core (2.1.200 cli) и VSCode (1.23.1).Большинство исключений, в случае их появления, помещают меня в отладчик VSCode и после продолжения возвращают страницу исключений разработчика, отправленную в браузер.Однако при возникновении ArugmentNullException ... происходит сбой приложения без взаимодействия с отладчиком VSCode.
Program.cs (код шаблона веб-интерфейса по умолчанию)
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace ExceptionIssue {
public class Program {
public static void Main(string[] args) {
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
Startup.cs (код шаблона веб-интерфейса по умолчанию)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace ExceptionIssue {
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.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
}
. \ Controllers \ ValuesController.cs (измененное получение)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace ExceptionIssue.Controllers {
[Route("api/[controller]")]
public class ValuesController : Controller {
// GET api/values
[HttpGet]
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id) {
String result = null;
switch (id) {
case 1:
throw new Exception("One");
break;
case 2:
throw new ArgumentNullException("Two");
break;
case 3:
result = String.Format(null, "UH OH");
break;
case 4:
String template = null;
result = String.Format(template, "UH OH");
break;
}
return result;
}
// POST api/values
[HttpPost]
public void Post([FromBody]string value) {
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value) {
}
// DELETE api/values/5
[HttpDelete("{id}")]
public void Delete(int id) {
}
}
}
- Также обратите внимание, что String.Format (null, "UH OH"); возвращает "UH OH", тогда как String.Format (template, "UH OH); создает исключение ArgumentNullException (не уверен, почему есть разница, если они оба не делают одно и то же).
Не уверен, что это проблема .NET Core, Kestrel или VSCode, но она воспроизводится на 100% примоя часть.