在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方法发送敏感信息的请求都应该被应用程序拒绝。
答案 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
参数。