Как отклонить метод Get при передаче QueryString
В приложении 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) не вызывался тот же метод или действие, описанное выше, и я просто хочу показать сообщение.
URL с Querystring должен быть таким: https://www.example.com/PaymentInformation.aspx?xyz
Может кто-нибудь подскажет, что будет MapRoute в Route Config.
Вкратце, мы хотим, чтобы любой запрос с конфиденциальной информацией, отправленный методом GET, был отклонен приложением.
1 ответ
Я не думаю, что вы должны идти по этому пути, но если это действительно то, чего вы хотите, попробуйте следующее:
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
параметр при необходимости.