c# - IIS Express 在异常时处理 HTTP 状态
问题描述
我有一个 ASP.NET Core 2.1 REST API 应用程序。我希望能够将它作为 Windows 服务以及在 IIS 上运行,因此我为每个服务创建了一个启动项目,并且它们使用共享核心库作为应用程序的“胆量”。我正在使用我认为可能会发挥作用的 CORS。
Service 项目在 Visual Studio 的 dotnet.exe 下正常运行,IIS 项目使用 Visual Studio 的 IIS Express 运行。他们的启动代码差别很小,在这篇文章的末尾。
像大多数其他 API 一样,我想依靠 Http 状态码来传达信息。在一个端点上,如果请求超过某个限制,我想使用 RequestSizeLimitAttribute 返回 413 状态。
Windows 服务项目行为正确,向客户端返回正确的状态代码。但是当我以 IIS Express 运行时,客户端首先发送一个 OPTIONS 请求并返回 204(如预期的那样),但之后的响应始终是 502-Bad Gateway。
如果由于 RequestSizeLimitAttribute 而发生异常,IIS 是否会出现问题?
//IIS Express Project Startup Code
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IConfiguration config => new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile("appsettings.Development.json", optional: true)
.Build();
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()
.Build();
和
//Windows Service startup code
public static IConfiguration config => new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile("appsettings.Development.json", optional: true)
.Build();
public static void Main(string[] args)
{
RunWebHost(args, logger);
}
public static void RunWebHost(string[] args)
{
var isService = true;
if (Debugger.IsAttached || args.Contains("--console"))
{
isService = false;
}
var pathToContentRoot = Directory.GetCurrentDirectory();
if (isService)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
pathToContentRoot = Path.GetDirectoryName(pathToExe);
}
var webHostArgs = args.Where(arg => arg != "--console").ToArray();
var host = WebHost.CreateDefaultBuilder(webHostArgs)
.UseContentRoot(pathToContentRoot)
.UseConfiguration(config)
.UseStartup<Startup>()
.Build();
if (isService)
{
host.RunAsService();
}
else
{
host.Run();
}
}
解决方案
推荐阅读
- jquery - 在文本字段上从右到左更改静态文本
- javascript - 如何检查字符串是否包含数组?
- python-3.x - Python中列表理解中使用正则表达式删除字符
- stdout - 如何在ansible playbook中使用暂停打印经过的时间
- powerbi - 是否可以在 Power Bi 服务中将每个用户标记/分配默认工作区/我的工作区为高级版
- c++ - 启动文件以启动 ROS 服务?
- c# - 如何在 C# 中获取传入电子邮件的消息?
- tableau-api - 获取 Tableau 中参数的先前值
- php - 配置 PHP 页面上的表单重定向
- javascript - 如何使用 PDFMake 在 ui-grid pdf 导出中添加自定义标题?