c# - 在中间件中获取控制器的类型信息(或如何区分对 Web api 和页面的请求)
问题描述
我想创建处理异常但对 api 控制器和剃须刀页面/mvc 的不同请求的中间件。在中间件中,我只有一个 context.Request.Path url,想“找到”一个分配给处理请求的控制器(或页面),然后分析它的类型信息并做出决定。
像这样的东西:
MyExceptionHandlerMiddleware{
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
var path = context.Request.Path;
var isApiCall = ... ????
if ( isApiCall )
{
var json = GetJson(ex);
wait context.Response.WriteAsync(json); // return json
}
else {
await _options.ExceptionHandler(context); // return the page
}
}
}
}
问题是,此时似乎常规路由信息不可用。如何获取控制器的类型信息?
如何区分对 web api 的调用和中间件上下文中的页面?
解决方案
不知道你为什么要这样做。UseExceptionHandler()
您可以使用Asp.Net Core 中的内置中间件并使用它的Path
属性来获取路由信息,可能就像
var path = HttpContext.Features.Get<IExceptionHandlerPathFeature>()?.Path;
推荐阅读
- c# - 在 Unity 上更新 Nuget 时会抛出 500,并带有“确保控制器具有无参数的公共构造函数。”,
- c - 带有字符串的 Scanf() 函数
- django - 如何过滤子集合的最后一项?
- python - 无法通过 Python 发送电子邮件
- python - datashader xarray.Image 到 holoviews 点
- unix - What does terminal / hyperterm display in the tab title? Is it possible to customize this?
- mysql - Mysqli 从给定值在任何列中的行中获取多个不同的值
- c# - 通过异步示例了解 C# 中的并行编程
- dynamics-crm - 如何在不将其授予用户的情况下授予工作流权限?
- node.js - 数据湖 AWS 无服务器 Amazon S3