加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:Controller.HandleUnknownAction 4

发布时间:2020-12-16 03:27:19 所属栏目:asp.Net 来源:网络整理
导读:我重写了ASP.NET MVC的Controller.HandleUnknownAction(string actionName)方法.在未找到操作时以及在不允许HTTP方法时调用它.我该如何区分这两者?我想在找不到动作时返回404,在允许注意方法时返回405. 解决方法 我能想到的最简单的方法是创建自定义动作过
我重写了ASP.NET MVC的Controller.HandleUnknownAction(string actionName)方法.在未找到操作时以及在不允许HTTP方法时调用它.我该如何区分这两者?我想在找不到动作时返回404,在允许注意方法时返回405.

解决方法

我能想到的最简单的方法是创建自定义动作过滤器.如果不允许方法,这将允许您返回http状态代码结果

public class HttpPostFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!(filterContext.RequestContext.HttpContext.Request.GetHttpMethodOverride().Equals("post",StringComparison.InvariantCultureIgnoreCase)))
        {
            filterContext.Result = new HttpStatusCodeResult(405);
        }
    }
}

或者更好的是,创建它的更通用版本,就像AcceptVerbsAttribute一样

[AttributeUsage(AttributeTargets.Method,AllowMultiple = false,Inherited = true)]
public sealed class AllowMethodsAttribute : ActionFilterAttribute
{
    public ICollection<string> Methods
    {
        get;
        private set;
    }

    public AllowMethodsAttribute(params string[] methods)
    {
        this.Methods = new ReadOnlyCollection<string>(methods);
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        string httpMethodOverride = filterContext.HttpContext.Request.GetHttpMethodOverride();
        if (!this.Methods.Contains(httpMethodOverride,StringComparer.InvariantCultureIgnoreCase))
        {
            filterContext.Result = new HttpStatusCodeResult(405);
        }
    }
}

并使用它

[AllowMethods("GET")]
public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    return View();
}

自定义属性以HttpVerbs作为参数取决于您.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读