Как разрешить запрос GET только для одного метода или веб-службы? - PullRequest
0 голосов
/ 19 августа 2010

Поскольку я нашел здесь , я могу изменить webconfig, чтобы разрешить / запретить методы на веб-сервисах.

Мне нужен только один метод, чтобы быть GET, а для других он долженБыть POST, есть ли способ настроить только один метод (или, может быть, веб-сервис, если нет другого способа) принимать запросы GET?Я на IIS7.

Ответы [ 2 ]

1 голос
/ 19 августа 2010

Вы можете сделать это, изменив сопоставления обработчиков, либо в IIS, либо через сопоставления httpHandler, определенные в web.config.

Или вы можете сделать это с помощью HttpModule.

Однако, поскольку вы уже используете asp.net (чтобы судить по вашим тегам) и у вас есть только одно исключение, то, вероятно, более простой способ - просто сделать это на этом уровне. Если нет, то логика почти такая же, как при использовании HttpModule.

В вашем базовом классе страниц (если вы еще не определили абстрактный класс между System.Web.UI.Control.Page и вашими собственными страницами, на которые стоит взглянуть, это удобное место для размещения часто используемых методы) поместите виртуальный член, который вызывается перед главным обработчиком загрузки страницы (например, есть метод OnLoad, который вызывает его, а затем ваш «реальный» метод загрузки страницы).

В этом методе проверьте используемый метод http, и, если он неправильный, задайте код состояния 405, выведите страницу ошибки для бонусных отметок, а затем остановите всю обработку.

На вашей странице, которая позволяет получить, переопределить и изменить метод, который вы проверяете.

Если ваша структура класса не позволяет сделать это легко, то подход HttpModule будет проще. Здесь вам нужно изучить URI, чтобы узнать, какой метод разрешить, но в остальном это почти то же самое.

1 голос
/ 19 августа 2010

Зависит от веб-сервера.

Вы можете возвращать ошибки при определенных запросах в Apache, например.

Используйте директиву Limit:

<Directory />
  Options All
  AllowOverride All
  <Limit POST PUT DELETE CONNECT PROPFIND PROPPATCH>
    # Require valid-user
    Deny from all
  </Limit>
</Directory>

Редактировать - Просто нашел документацию по этому вопросу: http://httpd.apache.org/docs/2.0/mod/core.html#limit

...