0

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

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

当我们点击这个 URL 时,它会调用下面提到的方法:https://www.example.com/PaymentInformation.aspx

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

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

带有 Querystring 的 URL 应该是这样的:https://www.example.com/PaymentInformation.aspx?xyz

可以请任何人建议我什么是路线配置中的 MapRoute。

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

4

1 回答 1

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必要时检查该参数。

于 2016-06-30T08:52:20.843 回答