覆盖所有 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
时创建一个匹配的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问题中量身定制了一个答案