Различить клиентское приложение и браузер в ASMX Web Service? - PullRequest
4 голосов
/ 10 августа 2010

Это продолжение Выбор строки подключения на основе вида запроса , на который я не получил ответа, а то, что, по моему мнению, не сработало.

У меня есть веб-сервисдля этого нужно выбрать конкретную строку подключения, основываясь на том, что пользователь вызывает ее из браузера или из клиентского приложения.

Я пытался:

HttpContext.Current != null? ConnectionStrings["Website"].ConnectionString : ConnectionStrings["Client"].ConnectionString

, но понял, что в какой-то момент, даже если яЯ использую клиентское приложение, есть некоторый HttpContext (если кто-то может объяснить, почему это было бы здорово), но поле Browser в Request равно "Unknown".Итак, затем я попытался:

if ( HttpContext.Current != null )
{
  if ( HttpContext.Current.Request.Browser != "Unknown" )
  {
     //browser connection string here
  }
  else
     //client app connection string here
}
else
  //client app connection string here

При отладке это творит чудеса, но в среде тестирования он все еще указывает на строку подключения браузера, даже при вызове из клиентского приложения, как будто в какой-то момент браузер не«Неизвестно» ...

Есть НАМНОГО более простой / простой способ сделать это?То, как я это делаю, кажется очень уродливым.

В настоящий момент я в отчаянии, так как понятия не имею, почему это происходит ..

1 Ответ

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

Вместо того, чтобы обнаруживать и включать тип браузера, рассмотрите следующие два предложения:

Добавить заголовки пользовательских запросов

В различных вызывающих программах определите новый настраиваемый заголовокв вашем Http-запросе.

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("CallerType", "ClientApp"); // "Browser", etc.

Тогда вы точно и точно знаете, какой тип клиента вызывает.Это было бы трудно ошибиться и не могло быть подделано / ошибочно.

Включить тип вызывающего в QueryString

myService.asmx?BrowserType=1

Добавить простую новую строку запросапараметр вашего .asmx веб-метода.Это будет работать точно так же в контролируемой среде, но если другие пользователи / разработчики ошибаются или ошибочно принимают ожидаемые значения, вам придется принять другие меры для исправления / обработки.

Оба позволяют вамлегко определить connString на входящее значение.Возможно, отсутствие модификатора / заголовка, вы можете принять по умолчанию.Ваш типовой вопрос имеет 2 основных результата, и любое предложенное решение будет легко расширить (браузер, клиентское приложение, iPhone, что бы вы ни сказали).

...