Как отклонить метод 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 параметр при необходимости.

Другие вопросы по тегам