Maison > développement back-end > Tutoriel C#.Net > MVC 5 restreint toutes les requêtes HTTP au POST

MVC 5 restreint toutes les requêtes HTTP au POST

巴扎黑
Libérer: 2017-06-26 15:20:01
original
2098 Les gens l'ont consulté

Un collègue a soulevé une question aujourd'hui. Il souhaitait restreindre toutes les requêtes HTTP reçues par MVC au POST.

Ensuite, dans le contenu suivant, je partagerai avec vous la méthode à laquelle j'ai pensé. Si vous avez d'autres méthodes, veuillez laisser un message.

1. Fonctionnalité HttpPostAttribute

La première chose qui me vient à l'esprit est que MVC fournit la fonctionnalité HttpPostAttribute, qui est utilisée pour restreindre la soumission des requêtes HTTP en mode POST.

1   public class HomeController : Controller2   {        
3         [HttpPost]4         public ActionResult Index()5         {6             return View();7         }8   }
Copier après la connexion

Cette fonctionnalité ne peut être marquée que sur la méthode Action. Nous devons marquer chaque méthode Action et créer un codeur. Nous ne pouvons certainement pas accepter cette méthode.

1     //2     // 摘要:3     //     表示一个特性,该特性用于限制操作方法,以便该方法仅处理 HTTP POST 请求。4     [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]5     public sealed class HttpPostAttribute : ActionMethodSelectorAttribute6     {7 8     }
Copier après la connexion
Afficher le code

2. Utilisation de HttpModule

Dans Asp.Net pipeline , vous pouvez enregistrer votre propre gestionnaire d'événements pour les événements dans l'objet HttpApplication via HttpModule afin de contrôler toutes les requêtes HTTP.

 1     public class HttpMethodModule : IHttpModule 2     { 3         public void Init(HttpApplication context) 4         { 5             context.PostMapRequestHandler += Context_PostMapRequestHandler; 6         } 7  8         private void Context_PostMapRequestHandler(object sender, EventArgs e) 9         {10             HttpApplication httpApplication = (HttpApplication) sender;11             HttpContext httpContext = httpApplication.Context;12 13 14             //判断当前是否使用的是 MVC 框架来处理请求,其它的请示不做控制。15             MvcHandler mvcHandler = httpContext.Handler as MvcHandler;16 17             if (mvcHandler != null && httpContext.IsPostMethod() == false) {18                 throw new HttpException(404, "访问的资源不存在。");19             }20         }21 22         public void Dispose()23         {24 25         }26     }
Copier après la connexion

 Ajoutez les configurations pertinentes dans Web.config.

1 <?xml version="1.0" encoding="utf-8"?>2 <configuration>3   <system.webServer>4     <modules>5       <add name="HttpMethod" type="HttpPostWebApp.Web.HttpMethodModule, HttpPostWebApp"/>6     </modules>7   </system.webServer>8 </configuration>
Copier après la connexion

Après test, il peut répondre à nos exigences (les résultats des tests ne seront pas démontrés).

3. Filtre MVC

Dans MVC, les requêtes peuvent être contrôlées via des filtres globaux.

 1     public class HttpPostFilter : IAuthorizationFilter 2     { 3         public void OnAuthorization(AuthorizationContext filterContext) 4         { 5             if (filterContext.HttpContext.IsPostMethod() == false) { 6  7                 //如果不是POST请求,则返回404。 8                 filterContext.Result = new HttpNotFoundResult(); 9             }10         }11     }
Copier après la connexion

Lorsque le programme démarre, inscrivez-vous en tant que filtre global.

1     public class FilterConfig2     {3         public static void RegisterGlobalFilters(GlobalFilterCollection filters)4         {5             filters.Add(new HttpPostFilter());6         }7     }
Copier après la connexion

4. Contraintes de routage

Lors de l'enregistrement d'un itinéraire, vous pouvez définir des contraintes de routage. De la manière suivante, la méthode de requête peut être limitée aux requêtes POST.

 1     public class RouteConfig 2     { 3         public static void RegisterRoutes(RouteCollection routes) 4         { 5             routes.MapRoute( 6                 name: "Default", 7                 url: "{controller}/{action}/{id}", 8                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 9                 //限制请求方式必须是POST10               , constraints:new { httpMethod =  new HttpMethodConstraint("POST")}11             );12         }13     }
Copier après la connexion

5. Remplacement des méthodes du contrôleur

Dans MVC, tous les contrôleurs héritent de Controller par défaut.

Nous pouvons définir une classe abstraite de BaseController, remplacer OnActionExecuting et d'autres contrôleurs héritent de BaseController.

 1     public abstract class BaseController : Controller 2     { 3         protected override void OnActionExecuting(ActionExecutingContext filterContext) 4         { 5              6             if (filterContext.HttpContext.IsPostMethod() == false) { 7                 //如果不是POST请求,则返回404。 8                 filterContext.Result = new HttpNotFoundResult(); 9             }10             else {11                 base.OnActionExecuting(filterContext);12             }13         }14     }
Copier après la connexion

Cette méthode nécessite de modifier les classes de base de tous les contrôleurs et n'est pas recommandée.

Bien sûr, si vous avez défini votre propre classe de base de contrôleur, la charge de travail de cette méthode est également très faible.

Résumé

Parmi les cinq méthodes ci-dessus, les méthodes deux, trois et quatre sont très simples, mais je recommande la méthode quatre car si les exigences changent, la charge de travail de maintenance est minime.

Si vous avez d'autres méthodes, merci de laisser un message, merci !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal