[英]How to return Unathorized from .Net Core Web API
我有簡單的 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)如果您沒有 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(){
更新從 .netcore 2.1 開始,您現在可以使用通用 ActionResult
public ActionResult<SomeData> GetSomeData(){
你可能會返回這樣的東西:
return StatusCode(statusCode);
或
return Unauthorized();
由於StatusCode()
和Unauthorized()
返回 ActionResult,因此您需要將操作的返回類型更改為IActionResult
。 (這意味着您需要將實際值返回為Ok(yourValue)
)。
示例:
public IActionResult GetSomeData()
{
if(!CheckAccessCondition())
return Unauthorized();
return Ok(somevalue);
}
ASP.NET 核心引入了授權策略。 在此處閱讀更多相關信息。
從邏輯上講,您必須首先更改方法的返回類型。 然后你可以處理它如下:
public IActionResult GetSomeData()
{
if(!CheckAccessCondition()) return HttpUnauthorized();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.