c# – 如何从.Net Core Web API返回Unathorized
发布时间:2020-12-15 19:47:47 所属栏目:百科 来源:网络整理
导读:我有简单的API控制器,我确实需要返回401. 方法的返回类型不是IActionResult所以我不能只返回Unauthorized() 在这种情况下如何归还未经授权的人? [Produces("application/json")]public class MyController : Comntroller{ public SomeData GetSomeData([Fro
我有简单的API控制器,我确实需要返回401.
方法的返回类型不是IActionResult所以我不能只返回Unauthorized() 在这种情况下如何归还未经授权的人? [Produces("application/json")] public class MyController : Comntroller { public SomeData GetSomeData([FromBody]RequestData data) { if(!CheckAccessCondition(data,GetCurrentUser())) // ?? how to return from here 401 /// } } UPD: >使用IActionResult不是一种方法.从一方面来看它不是类型安全的,并且不允许生成C#&我的API的打字稿客户端(现在我正在使用NSwag) 解决方法
如果你没有IActionResult返回类型的唯一原因是你想要返回json数据,你仍然可以返回它并执行以下操作:
public IActionResult GetSomeData(){ if (condition) return Json(myData); else return Unauthorized(); } 有点hacky,但你也可以简单地返回null并使用HttpContext配置你的响应 public SomeData GetSomeData() { if (condition) return myData; else { HttpContext.Response.StatusCode = 401; return null; } } 如果由于某些原因(例如类型安全性)需要SomeData,则可以选择设置过滤器类. public class MyAccessAttribute : Attribute,IActionFilter{ public void OnActionExecuting(ActionExecutingContext context) { if (condition) context.Result = new UnauthorizedResult(); } public void OnActionExecuted(ActionExecutedContext context) { } } 然后,您可以在此操作中使用它: [MyAccess] public SomeData GetSomeData(){ 更新 public ActionResult<SomeData> GetSomeData(){ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |