c# - ASP.Net MVC编写自定义Attribute

查看:373
本文介绍了c# - ASP.Net MVC编写自定义Attribute的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我在将近一半的方法中,需要执行一段特定代码。这段代码负责将HTTP返回头中增加一个Header。如果复制粘贴这些代码实在太低效率了。请问如何写一个自定义Attribute来实现加了这个Attribute的方法就具有这些特性呢?

同时,我也在近一半的方法中(另一半只需要留给ASP.Net自己处理),需要对这个方法Try Catch住,使得发生异常时能够被我自己捕获,异常的处理代码都是相同的。如果复制粘贴这些代码,实在太低效率了。如何写一个自定义Attribute来实现加了这个Attribute的方法就具有这些特性呢?

解决方案

1.比如在header加入允许跨域请求

public class AllowOriginAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "*");
        base.OnActionExecuting(filterContext);
    }
}

2.将异常抛给最上层进行统一处理。
写一个父级Controller,其他Controller集成它,然后重写这个可统一处理异常

protected override void OnException(ExceptionContext context)
{
    
    base.OnException(context);
    //处理异常
    context.ExceptionHandled = true;
    context.HttpContext.Response.Clear();
    context.HttpContext.Response.StatusCode = GetStatusCodeForException(context);

    context.Result = ...//判断是否是json,返回不同的结果

    context.HttpContext.Response.TrySkipIisCustomErrors = true;
}

这篇关于c# - ASP.Net MVC编写自定义Attribute的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆