覆盖所有 GET 请求 ASP.NET MVC

本文关键字:ASP NET MVC 请求 GET 覆盖 | 更新日期: 2023-09-27 17:56:59

覆盖.NET MVC中的所有GET请求并将它们通过管道传输到单个控制器的操作的最佳方法是什么?

我只希望 POST 请求通过标准管道,例如

GET /Eating/Apples -> /GlobalProcessor/Index
POST /Eating/Apples -> /Eating/Apples

如果.NET过滤器是你的答案,那么我将如何在不使用RedirectToAction()的情况下完成它,因为我需要维护URL结构。意义

GET /Eating/Apples

将由/GlobalProcessor/Index 处理,但客户端显示为/Eating/Apples

如果你想知道为什么 - 它是针对我正在实现的动态AJAX处理后端。

覆盖所有 GET 请求 ASP.NET MVC

您可以创建一个匹配所有内容的路由,然后在请求方法GET时创建一个匹配的IRouteConstraint

routes.MapRoute("Get", 
"{*path}", 
new {controller = "GlobalProcessor", action = "Index" }, 
new {isGet = new IsGetRequestConstraint()} );

IsGetRequestConstraint是:

public class IsGetRequestConstraint: IRouteConstraint 
{ 
  public bool Match ( HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection ) 
  { 
    return httpContext.Request.Method == "GET"; 
  } 
}

您可以尝试在路由配置中添加类似的东西

routes.MapRoute(
    "GlobalProcessorThingy",
    "{*url}",
    new { controller = "GlobalProcessor", action = "Index" }
);

我从这个SO问题中量身定制了一个答案