C# 如何在ASP.NET内核中返回403禁止响应作为IActionResult
当尝试执行无效操作时,我想向客户端返回403禁止。我需要用什么方法 我在互联网上搜索过,但我只找到了这些MVC 5: 如果web api方法的返回类型为HttpResponseMessage,则 您需要使用以下代码:C# 如何在ASP.NET内核中返回403禁止响应作为IActionResult,c#,asp.net-core,C#,Asp.net Core,当尝试执行无效操作时,我想向客户端返回403禁止。我需要用什么方法 我在互联网上搜索过,但我只找到了这些MVC 5: 如果web api方法的返回类型为HttpResponseMessage,则 您需要使用以下代码: return Request.CreateErrorResponse(HttpStatusCode.Forbidden, "RFID is disabled for this site."); Or if the return type for your web api meth
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.");
如何为IActionResult类型返回403:
public IActionResult Put(string userid, [FromBody]Setting setting)
{
var result = _SettingsRepository.Update(userid, setting);
if (result == true)
{
return Ok(201);
}
else
{
return BadRequest();
}
}
您可以使用
返回新结果()代码>类声明是
public class ForbidResult : ActionResult, IActionResult
欲了解更多特殊用法,请访问MstfAsan的答案是使用:
return Forbid();
它是控制器基类上执行相同操作的方法
或
如果要返回消息,则当您希望以HTTP 403状态响应并允许ASP.NET Core的身份验证逻辑以其禁止的处理逻辑(可在启动
类中配置,并可能导致重定向到另一页)处理响应时,必须使用StatusCode,使用:
(这同样适用于未经授权()
如果您希望使用API中的HTTP 403状态代码进行响应,并且不希望ASP.NET核心身份验证逻辑执行任何重定向或其他操作,请使用:
return StatusCode(403);
如果不返回ActionResult
进行响应,可以使用以下代码:
public List<SomeModel> get()
{
...
... // check logic
...
Response.StatusCode = 403;
return new List<SomeModel>();
}
公共列表get()
{
...
…//检查逻辑
...
Response.StatusCode=403;
返回新列表();
}
只需使用ObjectResult返回带有状态代码的自定义响应即可
参见语法
return new ObjectResult("Message") {StatusCode = YOUR_STATUS_CODE };
注意-
你也可以传递一个对象
return new ObjectResult(your_model) {StatusCode = YOUR_STATUS_CODE };
示例:
public async Task<IActionResult> Post([FromBody] SomeData _data)
{
// do your stuff
// return forbidden with custom message
return new ObjectResult("Forbidden") { StatusCode = 403};
}
public异步任务Post([FromBody]SomeData\u data)
{
//做你的事
//禁止使用自定义消息返回
返回新的ObjectResult(“禁止”){StatusCode=403};
}
注意,在ASP.NET Core 2中,返回禁止结果
(由禁止
返回)将触发与框架身份验证代码的某种交互,如果您没有以框架理解的方式设置身份验证,则抛出错误“未指定authenticationScheme,未找到DefaultChallengeScheme。”如果不想与ASP.NET Core的身份验证集成,请坚持返回StatusCodeResult
以避免此错误。使用禁止()在Api中,即使我更改了DefaultBanbidscheme,控制器也会尝试重定向到Acccout/AccessDenied。只有状态码(403)似乎工作正常。稍微干净一点的版本是返回状态码((int)HttpStatusCode.Forbidden,messageOrSerializeableObject)
实际上有一种比@MovGP0建议的更简单的方法返回StatusCode(StatusCodes.Status403Forbidden,);
我正在研究如何在Startup.cs中设置东西,正如巴特所提到的,这里有一个有趣的线程:顺便说一句,你可以使用禁止()
并通过覆盖此处所述的身份验证事件来抑制重定向。有趣的是,至少在ASP NET CORE 2.2中,禁止结果不会继承自StatusCodeResult。
return new ObjectResult(your_model) {StatusCode = YOUR_STATUS_CODE };
public async Task<IActionResult> Post([FromBody] SomeData _data)
{
// do your stuff
// return forbidden with custom message
return new ObjectResult("Forbidden") { StatusCode = 403};
}