Как вернуть 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
.
Ответ 3
Вы можете использовать return new ForbidResult();
Объявление класса
public class ForbidResult : ActionResult, IActionResult
Для более частых посещений https://docs.microsoft.com/en-us/aspnet/core/api/microsoft.aspnetcore.mvc.forbidresult
Ответ 4
Если вы не вернете ActionResult
для ответа, вы можете использовать следующий код:
public List<SomeModel> get()
{
...
... // check logic
...
Response.StatusCode = 403;
return new List<SomeModel>();
}