【问题标题】:Override all GET requests ASP.NET MVC覆盖所有 GET 请求 ASP.NET MVC
【发布时间】:2014-04-05 23:19:03
【问题描述】:

在 .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 处理后端。

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-5


【解决方案1】:

您可以创建一个匹配所有内容的路由,然后在请求方法为 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"; 
  } 
}

【讨论】:

    【解决方案2】:

    您可以尝试在您的路线配置中添加类似的内容

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

    我为this SO question量身定制了一个答案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2012-07-28
      • 2017-04-27
      • 2011-12-14
      相关资源
      最近更新 更多