C# OnActionExecuting 跳过
时间: 2023-07-12 12:27:30 浏览: 139
如果你想在 ASP.NET Core 中跳过 `OnActionExecuting` 方法不执行它的代码,可以使用 `SkipOnActionExecuting` 特性。
首先,在你的控制器类上添加 `[SkipOnActionExecuting]` 特性,如下所示:
```csharp
[SkipOnActionExecuting]
public class MyController : Controller
{
// ...
}
```
然后,在你的 `OnActionExecuting` 方法中,检查控制器类上是否有 `SkipOnActionExecuting` 特性。如果有,就直接返回。如果没有,就执行正常的逻辑,如下所示:
```csharp
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.Controller.GetType().GetCustomAttribute<SkipOnActionExecutingAttribute>() != null)
{
return;
}
// Normal logic here...
}
```
这样,当你在某个具体的控制器类上添加了 `SkipOnActionExecuting` 特性时,该控制器类的 `OnActionExecuting` 方法就会被跳过。
相关问题
OnActionExecuting 身份验证失败返回
当在 `OnActionExecuting` 方法中进行身份验证时,如果验证失败,可以通过以下方式返回身份验证失败的结果:
1. 在 `context.Response` 中设置一个 HTTP 状态码(如 401 Unauthorized);
2. 创建一个 `HttpResponseMessage` 对象,设置好其内容和 HTTP 状态码,并将其赋值给 `context.Response`。
例如,以下代码演示了在 `OnActionExecuting` 方法中进行身份验证,如果验证失败,则返回一个 HTTP 状态码为 401 Unauthorized 的结果:
```csharp
public class AuthenticationFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext context)
{
// 进行身份验证
if (!IsAuthenticated(context.Request.Headers.Authorization))
{
// 验证失败,返回一个 HTTP 状态码为 401 的结果
context.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
}
base.OnActionExecuting(context);
}
private bool IsAuthenticated(AuthenticationHeaderValue authHeader)
{
// 实现身份验证逻辑
// 如果验证成功,返回 true;否则返回 false
}
}
```
OnActionExecuting 不通过抛出结果
在ASP.NET Core中,您可以通过实现ActionFilterAttribute类并重写OnActionExecuting方法来实现在Action执行前执行自定义逻辑的操作。如果您想要在OnActionExecuting方法中验证请求并根据验证结果返回不同的结果,可以使用以下代码示例:
```csharp
public class CustomActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// 在这里执行你的验证逻辑
if (/* 验证未通过*/)
{
// 如果验证未通过,可以使用以下代码返回自定义结果
context.Result = new JsonResult(new { ErrorMessage = "验证未通过" });
return;
}
base.OnActionExecuting(context);
}
}
```
在这个例子中,如果验证未通过,将返回一个包含错误消息的JSON结果。如果验证通过,则调用基类的OnActionExecuting方法,继续执行Action的逻辑。