Как вернуть 403 Запрещенный ответ как IActionResult в ASP.NET Core

Я хочу вернуть 403 Forbidden клиенту при попытке выполнить недопустимую операцию. Какой метод мне нужно использовать?

Я искал через Интернет, но нашел только для MVC 5:

Если тип возврата для вашего веб-метода api - HttpResponseMessage, тогда вам нужно использовать приведенный ниже код:

return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "RFID is disabled for this site.");
Or  if the return type for your web api method is IHttpActionResult then you need to use the below code

return StatusCode(HttpStatusCode.Forbidden,"RFID is disabled for this site.");

Как вернуть 403 для типа IActionResult:

public IActionResult Put(string userid, [FromBody]Setting setting)
 {
    var result = _SettingsRepository.Update(userid, setting);
    if (result == true)
    {
       return Ok(201);
    }
    else
    {
       return BadRequest();
    }
 }

Ответ 1

Если вы хотите отвечать статусом HTTP 403 и разрешить логику аутентификации ASP.NET Core обрабатывать ответ с помощью запрещенной логики обработки (может быть настроен в вашем классе Startup и может вызвать перенаправление на другую страницу), используйте:

return Forbid();

(то же самое относится к Unauthorized())


Если вы хотите ответить кодом статуса HTTP 403 из API и не хотите, чтобы логика аутентификации ASP.NET Core выполняла любое перенаправление или другое действие, используйте:

return StatusCode(403);

Ответ 2

Альтернативный ответ MstfAsan заключается в использовании:

return Forbid();

Это метод базового класса контроллера, который делает то же самое.

или

return StatusCode(403);

Если вы хотите вернуть сообщение, вы должны использовать StatusCode.

Ответ 4

Если вы не вернете ActionResult для ответа, вы можете использовать следующий код:

public List<SomeModel> get()
{
   ... 
   ... // check logic
   ...

   Response.StatusCode = 403;
   return new List<SomeModel>();
}