如何限制所有HTTP请求是POST方式?
这篇文章主要为大家详细介绍了MVC 5限制所有HTTP请求必须是POST方式的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
今天有位同事,提出了这样一个问题,他想限制所有MVC接收到的HTTP请求必须是POST方式。
接下来在下面的内容中,将我想到的方式分享给大家,如果大家有其它的方式,请留言。
一、HttpPostAttribute特性
大家首先想到时的,MVC提供了HttpPostAttribute特性,是用于限制HTTP请求必须POST方式来提交。
public class HomeController : Controller { [HttpPost] public ActionResult Index() { return View(); } }
这个特性只能在Action方法上面做标记,需要我们在每一个Action方法上面做标记,做一个Coder,这种方式,我们肯定接收不了。
// // 摘要: // 表示一个特性,该特性用于限制操作方法,以便该方法仅处理 HTTP POST 请求。 [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class HttpPostAttribute : ActionMethodSelectorAttribute { }
二、使用HttpModule
Asp.Net管线中,可以通过 HttpModule 对 HttpApplication 对象中的事件注册自己的事件处理程序,来控制所有的HTTP请求。
public class HttpMethodModule : IHttpModule { public void Init(HttpApplication context) { context.PostMapRequestHandler += Context_PostMapRequestHandler; } private void Context_PostMapRequestHandler(object sender, EventArgs e) { HttpApplication httpApplication = (HttpApplication) sender; HttpContext httpContext = httpApplication.Context; //判断当前是否使用的是 MVC 框架来处理请求,其它的请示不做控制。 MvcHandler mvcHandler = httpContext.Handler as MvcHandler; if (mvcHandler != null && httpContext.IsPostMethod() == false) { throw new HttpException(404, "访问的资源不存在。"); } } public void Dispose() { } }
在Web.config增加相关的配置。
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <modules> <add name="HttpMethod" type="HttpPostWebApp.Web.HttpMethodModule, HttpPostWebApp"/> </modules> </system.webServer> </configuration>
经过测试,是可以达到我们的要求(关于测试结果不在做演示)。
三、MVC过滤器
在MVC中,可以通过全局的过滤器来控制请求。
public class HttpPostFilter : IAuthorizationFilter { public void OnAuthorization(AuthorizationContext filterContext) { if (filterContext.HttpContext.IsPostMethod() == false) { //如果不是POST请求,则返回404。 filterContext.Result = new HttpNotFoundResult(); } } }
在程序启动时,注册为全局过滤器。
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HttpPostFilter()); } }
四、路由约束
在注册路由时,可以定义路由的约束。通过如下方式,可以将请求方式限制为POST请求。
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } //限制请求方式必须是POST , constraints:new { httpMethod = new HttpMethodConstraint("POST")} ); } }
五、重写Controller方法
在MVC中,所有控制器默认继承于Controller。
我们可以定义一个BaseController的抽象类,重写OnActionExecuting,其它的控制器都继承于BaseController。
public abstract class BaseController : Controller { protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (filterContext.HttpContext.IsPostMethod() == false) { //如果不是POST请求,则返回404。 filterContext.Result = new HttpNotFoundResult(); } else { base.OnActionExecuting(filterContext); } } }
这种方法,需要修改所有控制器的基类,不推荐。
当然如果你已经定义了自己的控制器基类,这种方式的工作量也是非常小的。
总结
上述五种方法中,二、三、四方法都非常简单,但是我比较推荐方法四,因为如果需求发生变化,维护工作量是最小的。
如果大家有其它的方式,请留言,谢谢!
Demo下载:mvchttppostwebapp
以上是如何限制所有HTTP请求是POST方式?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

http状态码520是指服务器在处理请求时遇到了一个未知的错误,无法提供更具体的信息。用于表示服务器在处理请求时发生了一个未知的错误,可能是由于服务器配置问题、网络问题或其他未知原因导致的。通常是由服务器配置问题、网络问题、服务器过载或代码错误等原因导致的。如果遇到状态码520错误,最好联系网站管理员或技术支持团队以获取更多的信息和帮助。

随着视频号在社交媒体上的普及,越来越多的人开始利用视频号分享他们的日常生活、见解和故事。然而,一些用户可能会遇到评论被限制的情况,这会让他们感到困惑和不满。一、如何解除视频号评论限制?要解除视频号评论限制,首先必须确保账号已正常注册并完成实名认证。视频号对评论设有要求,只有完成实名认证的账号才能解除评论限制。如果账号存在异常情况,需要先解决这些问题才能解除评论限制。2.遵守视频号的社区规范。视频号对评论内容有一定的规范要求,如果评论涉及违规内容,会被限制发言。要解除评论限制,需要遵守视频号的社区

掌握HTTP301状态码的含义:网页重定向的常见应用场景随着互联网的迅猛发展,人们对网页交互的要求也越来越高。在网页设计领域,网页重定向是一种常见且重要的技术,通过HTTP301状态码来实现。本文将探讨HTTP301状态码的含义以及在网页重定向中的常见应用场景。HTTP301状态码是指永久重定向(PermanentRedirect)。当服务器接收到客户端发

HTTP状态码200:探索成功响应的含义与用途HTTP状态码是用来表示服务器响应状态的数字代码。其中,状态码200表示请求已成功被服务器处理。本文将探索HTTP状态码200的具体含义与用途。首先,让我们了解一下HTTP状态码的分类。状态码被分为五个类别,分别是1xx、2xx、3xx、4xx和5xx。其中,2xx表示成功的响应。而200是2xx中最常见的状态码

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。

JavaScript如何实现图片的拖动缩放同时限制在容器内?在Web开发中,经常会遇到需要对图片进行拖动和缩放的需求。这篇文章将介绍如何使用JavaScript实现图片的拖动缩放,并限制在容器内的操作。一、拖动图片要实现图片的拖动,我们可以使用鼠标事件来跟踪鼠标位置,并将图片的位置随之移动。下面是一个示例代码://获取图片元素varimage

HTTP请求超时,服务器端常常会返回504GatewayTimeout状态码。该状态码表示服务器在执行某个请求时,经过一段时间后仍未能获取到请求所需的资源或完成请求的处理。它是5xx系列的状态码,表示服务器端遇到了临时的问题或过载,导致无法正确处理客户端的请求。在HTTP协议中,各种状态码都有特定的含义和用途,而504状态码则用于表示请求超时问题。在客户

如何在C++中实现HTTP流传输?使用Boost.Asio和asiohttps客户端库创建SSL流套接字。连接到服务器并发送HTTP请求。接收HTTP响应头并打印它们。接收HTTP响应正文并打印它。
