【发布时间】:2017-09-13 04:34:06
【问题描述】:
我确实有简单的 API 控制器,我确实需要返回 401。
方法的返回类型不是IActionResult 所以我不能只是return Unauthorized()
在这种情况下,我如何返回 Unauthorized?
[Produces("application/json")]
public class MyController : Comntroller
{
public SomeData GetSomeData([FromBody]RequestData data)
{
if(!CheckAccessCondition(data, GetCurrentUser()))
// ?? how to return from here 401
///
}
}
更新:
- 使用
IActionResult不是一种方法。从一方面来看,它不是类型安全的,并且不允许为我的 API 生成 C# 和 Typescript 客户端(现在我为此目的使用 NSwag) - 最好避免因为性能而引发异常(引发异常是非常昂贵的操作)
- 关于检查访问条件的一些更新 - 我确实需要检查授权用户是否有权使用请求数据进行操作。因此,对于使用一些“类似授权”的属性,最好在反序列化请求数据后进行检查(再次避免双重反序列化 - 因为性能)
【问题讨论】:
-
请查看this
-
创建一个操作过滤器来检查您的访问条件并在全球范围内应用它。从中返回 401 而不是控制器操作。
-
为什么返回类型不是IActionResult?
-
如果是未经授权的,你还想返回json吗?
-
在最新版本中你现在可以做
ActionResult<SomeData>
标签: c# asp.net asp.net-core