- Может ли контракт службы WCF вводить нулевой входной параметр?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Найдены страницы-дубли с GET-параметрами
- Что такое get-параметры на сайте
- Как избавиться от ошибки — Найдены страницы дубли с GET-параметрами
- Как использовать Clean-param
- Как использовать Disallow
- Как полностью закрыть все параметры GET одной строкой?
- Как избавиться от fbclid в URL страниц сайта?
- Что такое FBCLID?
- Чем опасен и как удалить параметр FBCLID?
- Ошибка Я. Вебмастера: найдены страницы дубли с GET-параметрами — что делать
- Что такое get-параметры на сайте
- Как избавиться от ошибки — Найдены страницы дубли с GET-параметрами
- Как использовать Clean-param
- Как использовать Disallow
Может ли контракт службы WCF вводить нулевой входной параметр?
У меня есть контракт, определенный следующим образом:
Я получаю исключение: [InvalidOperationException: операция «GetX» в контракте «IMyGet» имеет переменную запроса с именем «myX» типа «System.Nullable 1[System.Int32]’, but type ‘System.Nullable 1 [System.Int32]» не конвертируется «QueryStringConverter». Переменные для значений запроса UriTemplate должны иметь типы, которые могут быть преобразованы в QueryStringConverter.]
не удалось найти ничего об этой ошибке, кроме следующей ссылки: http://blog.rolpdog.com/2007/07/webget-and-webinvoke-rock.html, который является немного старым, а не решением в любом случае.
какие-либо идеи о том, что делать, кроме как избавиться от параметра с нулевым значением?
ОТВЕТЫ
Ответ 1
Да, вы можете иметь параметры с нулевым значением с WCF. Я думаю, ваша проблема здесь в том, что QueryStringConverter не работает с параметрами с нулевым значением.
Что делать? Вам нужно использовать атрибут UriTemplate? Если вы опубликуете это как «классический веб-сервис», тогда у вас не будет этой проблемы.
Другой вариант заключается в том, чтобы следовать рекомендациям в предоставленной вами ссылке — например, получить параметр myX как строку, а затем передать его в int?, где (скажем) «n» имеет значение NULL. Не очень.
Ответ 2
Существует решение этой проблемы, которая не требует каких-либо взломов. Это может показаться большой работой, но это не так и имеет большой смысл, если вы прочитаете ее. Ядро проблемы состоит в том, что действительно существует неразрешенная ошибка (начиная с .NET 4), что означает WebServiceHost не использует пользовательские QueryStringConverters. Поэтому вам нужно немного поработать и понять, как работает конфигурация WCF для WebHttpEndpoints. Ниже приведено решение для вас.
Во-первых, пользовательский QueryStringConverter, который допускает предоставление нулей в строке запроса, опуская их или предоставляя пустую строку:
Теперь пользовательский WebHttpBehavior, который будет использовать вместо QueryStringConverter вместо стандартного. Обратите внимание, что это поведение выводится из WebHttpBehavior, что важно для того, чтобы мы наследовали поведение, необходимое для конечной точки REST:
Теперь пользовательский ServiceHost добавляет настраиваемое поведение к WebHttpEndpoint, чтобы использовать пользовательский QueryStringConverter. Важно отметить в этом коде, что он происходит от ServiceHost и НЕ WebServiceHost. Это важно, потому что в противном случае ошибка, упомянутая выше, не позволит использовать пользовательский QueryStringConverter:
Поскольку мы не извлекаем из WebServiceHost, нам нужно сделать это и убедиться, что наша конфигурация верна, чтобы гарантировать, что служба REST будет работать. Что-то вроде следующего — все, что вам нужно. В этой конфигурации у меня также есть настройка конечной точки HTTP HTTP, потому что мне нужно было получить доступ к этой службе как из С# (используя WS HTTP в качестве ее лучшего), так и для мобильных устройств (используя REST). Вы можете опустить конфигурацию для этой конечной точки, если она вам не нужна. Важно отметить, что вам больше не нужно настраивать поведение конечных точек. Это связано с тем, что теперь мы добавляем собственное пользовательское поведение конечной точки, которое связывает пользовательский QueryStringConverter. Он происходит от WebHttpBehavior, который добавляет конфигурацию, что делает его теперь лишним.
Последнее, что нужно сделать, это создать пользовательский ServiceHostFactory и сообщить файлу svc, чтобы использовать его, что приведет к использованию всего пользовательского кода. Конечно, вы также можете создать пользовательский элемент, который позволит вам добавить поведение в конфигурации, но я считаю, что для этого поведения лучше использовать кодовый подход, поскольку маловероятно, что вы захотите удалить возможность обрабатывать типы с нулевым значением, поскольку это нарушит ваше обслуживание:
Измените разметку вашего файла Service.svc на следующее:
Теперь вы можете использовать типы NULL в своем сервисном интерфейсе без каких-либо проблем, просто опустив параметр или установив его в пустую строку. Следующие ресурсы могут вам больше помочь:
Надеюсь, это поможет!
Ответ 3
На самом деле. у вас абсолютно могут быть нулевые параметры или любой другой тип параметра, который не поддерживается QueryStringConverter из коробки. Все, что вам нужно сделать, это расширить QueryStringConverter для поддержки любого типа, который вам нужен. См. Принятый ответ в этом сообщении == >
Ответ 4
Hum, быстрое решение (не очень) — принять параметр nullable в виде строки в соответствующих кодах интерфейса и сервиса WCF.
Источник
Найдены страницы-дубли с GET-параметрами
Нет времени читать статью?
Но вам требуется продвижение сайта или создание сайта-лидера, идеального для SEO? Тогда вы можете оставить заявку на продвижение или заявку на создание сайта. Если вы собираетесь продвигать сайт самостоятельно — продолжайте чтение!
У сайта появились дубли страниц, которые мешают ему продвигать и создают проблемы: идет снижение индексации, ранжирования. Каждый день поисковая система индексирует определенный сайт и у него есть свой лимит к домену в сутки. Когда все лимиты уходят на мусорные страницы и URL, становится обидно, потому что качественные страницы с уникальным контентом остались в стороне.
Как узнать есть ли дубли на сайте? Например, в вебмастере Яндекс появилось сообщение: «Найдены страницы дубли с GET параметрами». Это значит, что поисковая система передает информацию владельцам сайтам, что контент есть на разных страница, а он одинаковый везде.
Что такое get-параметры на сайте
GET параметры в URL — специальные динамические параметры, которые позволяют изменять контент на страницах сайта. Часто находится в URL адресе сразу же после «?» и может разделяться «&». Часто владельцы сайтов интернет магазинов используют GET запросы и параметры для фильтров на сайте, либо для сортировки.
Примеры url с гет-параметрами:
https://site.ru/catalog/monitory?sort=price (get-параметр после ? — sort, его значение =price — сортировка по цене)
https://site.ru/catalog/search?q=lukoil (get-параметр после ? — q, его значение =lukoil — результаты поиска по слову «lukoil» на сайту)
Как избавиться от ошибки — Найдены страницы дубли с GET-параметрами
Простой и рабочий способ избавиться сейчас от таких дублей внести правки в ваш файл Robots.txt, через директорию и правила Clean-param или Disallow.
Если вы видите, что у вас появились дубли (дублированные страницы) из-за GET параметров, то Яндекс предлагает сделать вам правило Clean-param, которое будет действовать именно для Яше.
Это позволит поисковому роботу понять и объединить страницы, которые являются дублями. Если произошли изменения, тогда бот сможет их проверить и убрать лишний мусор из поиска.
Как использовать Clean-param
Как правильно использовать Clean-param, ниже будет небольшой пример сайта магазина. Например у нас на сайте есть такие дубли:
- /cat/auto/nissan/?sort=pop&order=asc
- /cat/auto/nissan/?sort=price&order=asc
- /cat/auto/nissan/?sort=price&order=desc
Чтобы запретить индексацию этих сортировок и фильтров, нужно добавить в robots.txt следующее:
User-agent: Yandex
Clean-param: sort&order /cat/auto/nissan/
sort&order – это уникальные параметры, которые могут меняться и требуют учета;
/cat/auto/nissan/ — это категория разделах, и те которые начинаются с /cat/auto/nissan/.
Как использовать Disallow
Другой проверенный способ избавиться от дублей с GET-параметрами можно, используя директиву Disallow. Опять же берем те же адреса, что выше в примере.
Задаем правило в файле robots.txt:
*?sort= , *&order= – это уникальные параметры. Страницы, содержащие такие параметры индексироваться не будут.
Как полностью закрыть все параметры GET одной строкой?
Однако нужно понимать, что если вы полностью закроете все страницы от индексации, иногда есть специальные страницы, которые могут быть обязательны.
Однако способами выше вы сможете решить проблему в Вебмастере Яндексе, гугле.
Источник
Как избавиться от fbclid в URL страниц сайта?
Последние две недели для одного из моих сайтов были очень сложными. Проблема – сильная нагрузка на сервер. Откуда “росли ноги” – я не мог никак разобраться. И вот на днях нашел в обновленном Google Search Console отчет, где показано несколько тысяч предупреждений для моих страниц. Я посмотрел, а это оказывается дубли страниц с параметром fbclid, который наплодил Facebook и почему-то игнорирует Google, хотя в robots.txt все прописано. Так или иначе, это обеспокоило меня и пришлось разбираться.
Что такое FBCLID?
Где-то с октября 2018 года, а может и раньше, вебмастера заметили, что в Яндекс Метрике появляются в отчетах странные страницы с параметром fbclid. Оказалось, что Facebook подготовил очередную гадость в виде отслеживания URL, которые ведут с его площадки на другие сайты – он добавляет метку FBCLID.
FBCLID – расшифровывается как Facebook Click Identifier , по аналогии с GCLID (Google Click Id). Таким образом, fbclid служит для обмена данными с Facebook Analytics.
Как сообщают в интернете:
Другая версия, высказанная на Reddit, заключается в том, что параметр введендля обхода интеллектуальной системы отслеживания Apple 2.0, которую компания ввела для защиты Safari от межсайтового отслеживания Facebook и других площадок. В начале октября Facebook как раз анонсировал запуск основных файлов cookie для межсайтового отслеживания данных из Safari и Mozilla Firefox.
Если мы выделим какую-либо ссылку в любом посте в FB, то увидим URL перехода с меткой fbclid:
Чем опасен и как удалить параметр FBCLID?
У меня на сайте не было настроек Canonical URL для каждой страницы. Поэтому, как только люди пачками открывали ссылки с Facebook, они попадали не на оригинальные страницы, а на дубли. Таким образом сбоила база данных. Некоторые модули не понимают ситуацию и начинают перезаписывать уже существующие таблицы. В итоге веб-сервер не выдерживает и падает.
Существует несколько способов как от этого избавиться:
1. Самый простой для Яндекса – прописать директиву Clean Param в robots.txt:
2. Для Google – заходим в Search Console, и в старом интерфейсе находим пункт Сканирование -> Параметры URL. Нужно добавить новый параметр и запретить роботу индексировать:
3. В Google Analytics выбираем нужный ресурс, затем Администрирование -> Настройка представления данных. Находим поле “Исключить параметры запроса URL” и добавляем:
4. Можно также прописать параметр canonical URL, как это сделать описано в технических документациях Google и Яндекс .
5. Дополнительно можно прописать в файле .htaccess автоматический редирект со страниц с параметрами fbclid на оригинальные:
RewriteEngine On
RewriteCond %
RewriteRule (.*) /$1? [R=301,L]
И последний способ, на CMS WordPress и Joomla работает 100%, сам его использую. Бороздя по просторам интернета, нашел небольшой кусок php-кода, его нужно вставить в Header и прибудет счастье:
Вот в принципе и все, как побороть эту “заразу”. Советую также полистать справку Facebook .
Источник
Ошибка Я. Вебмастера: найдены страницы дубли с GET-параметрами — что делать
Дубли страниц могут приводить к потери позиций в поисковой выдаче и снижать скорость индексации. Стоит понимать, что у поискового робота есть определенный лимит запросов к домену в день. Поэтому существует вероятность того, что он потратит все лимиты на сканирование мусорных страниц и не доберется до страниц с уникальным контентом.
О наличии проблемы с дублированным контентом свидетельствует сообщение в панели Вебмастера: «Найдены страницы дубли с GET параметрами». В своем сообщении Яндекс информирует вебмастера о том, что на некоторых страницах сайта размещен одинаковый контент, различающийся только гет-параметрами.
Что такое get-параметры на сайте
Как избавиться от ошибки — Найдены страницы дубли с GET-параметрами
Если в поиске есть дублированные страницы из-за гет-параметров, Яндекс предлагает воспользоваться правилом Clean-param в robots.txt (правило действительно только для Яндекс, Google его не воспринимает).
В результате использования Clean-param поисковый робот Яндекса объединяет сигналы с дублированных страниц на основной. После того, как краулер узнает обо всех произошедших изменениях, страницы с не имеющими значение гет-параметрами исчезнут из поисковой выдачи.
Как использовать Clean-param
Для понимания того, как используется Clean-param, стоит привести простой пример. Существуют дубли страницы со следующими гет-параметрами:
Чтобы в результатах поиска учитывалась только основная страница http://mysite.ru/cat/auto/nissan/, нужно задать правило Clean-param в файле robots.txt:
User-agent: Yandex
Clean-param: sort&order /cat/auto/nissan/
sort&order – это динамические параметры, не требующие учета;
/cat/auto/nissan/ — это префикс использования директивы, обозначающий, что не следует учитывать указанные параметры для страниц, которые начинаются с /cat/auto/nissan/.
Как использовать Disallow
Избавиться от страниц-дублей с GET-параметрами можно, используя директиву Disallow. Для примера возьмем те же страницы-дубли:
Чтобы в результатах поиска учитывалась только основная страница http://mysite.ru/cat/auto/nissan/, нужно задать правило в файле robots.txt:
User-agent: *
Disallow: *?sort=
Disallow: *&order=
*?sort= , *&order= – это динамические параметры. Страницы, содержащие такие параметры индексироваться не будут.
Также можно закрыть от индексации ВСЕ Get-параметры одним правилом?
User-agent: *
Disallow: *?
Будьте осторожны! Используйте директиву Disallow очень внимательно, чтобы случайно не закрыть от индексации нужные страницы (например, не используйте правило, если карточки товара или категории в обязательном порядке содержат get-параметр в url).
Источник