如何在传递QueryString时拒绝Get方法

时间:2016-06-30 08:20:16

标签: asp.net-mvc url.action urlrewriting.net

在MVC应用程序中,我的当前路由配置是:

routes.MapRoute(
    "PaymentInformation",
    "PaymentInformation.aspx/{resNum}",
    new { controller = "Reservation", action = "Edit", resNum = UrlParameter.Optional }
);

当我们点击此网址时,会调用下面提到的方法:https://www.example.com/PaymentInformation.aspx

HttpGet]
[ValidateRequest(true)]
public ActionResult Edit(string resNum)
{
    ReservationPresenter reservationPresenter = new ReservationPresenter();
    return View(reservationPresenter);
}

我想要的是,当传递Querystring时(在GET方法中)然后不应该调用上面相同的上述方法/ Action ,我只想显示一条消息。

带有Querystring的网址应如下所示:https://www.example.com/PaymentInformation.aspx?xyz

可以请任何人建议我在Route Config中使用MapRoute。

简而言之,我们想要的是,任何通过GET方法发送敏感信息的请求都应该被应用程序拒绝。

1 个答案:

答案 0 :(得分:0)

我不认为这是你应该去的方式,但如果它真的是你想要的,请尝试以下方法:

1)创建一个IRouteConstraint类并实现它,如下所示:

public class NonQueryStringRouteConstraint : IRouteConstraint {
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
        return httpContext.Request.QueryString.Count == 0;
    }
}

2)将约束添加到路线:

routes.MapRoute(
    "PaymentInformation",
    "PaymentInformation.aspx/{resNum}",
    new { controller = "Reservation", action = "Edit", resNum = UrlParameter.Optional },
    new { resNum = new NonQueryStringRouteConstraint() }
);

请注意,NonQueryStringRouteConstraint也会在生成URL时执行,因此您可能需要在必要时检查routeDirection参数。