Отправить пользовательский заголовок для всех вызовов WCF REST OPTION - PullRequest
3 голосов
/ 12 апреля 2011

Я пытаюсь внедрить отдельную службу WCF REST. Одна из проблем, с которыми я сталкиваюсь в настоящее время, заключается в том, что я должен отправлять пользовательские объекты, которые WebGet не может обработать. Поэтому я пытаюсь отправить их с POST вместо GET.

Теперь, конечно, я не могу сделать JSONP-запрос с данными POST. Чтобы обойти это, я должен отправить заголовок ALLOW-ORIGIN всем вызовам, сделанным с помощью HTTP-метода «OPTIONS». Есть ли

  • Как применить заголовок к каждому вызову OPTION?
  • Способ перехвата и разрешения всех OPTION-вызовов без установки [WebRequest(method = "*")] (вместо [WebRequest(method = "POST")]
  • Как добавить заголовки и вернуть запрос без вызова метода WCF?

Или, альтернативно, как я могу переопределить метод сериализации параметров WebGet?

Я уже пытался решить эту проблему с помощью пользовательских конечных точек и MessageDispatchers, но, похоже, это не работает.

1 Ответ

1 голос
/ 13 апреля 2011

Я разобрался, как перезаписать параметр сериализации в WebGet. Этот вопрос указал мне правильное направление.

Мне просто нужно было переписать HttpBehavior и добавить свой собственный QueryStringConverter, который использует сериализатор JSON Newtonsoft.


    public class CustomQueryStringConverter :System.ServiceModel.Dispatcher.QueryStringConverter
        {
            public override bool CanConvert(Type type)
            {
                return true;
            }

            public override object ConvertStringToValue(string parameter, Type parameterType)
            {
                if (base.CanConvert(parameterType))
                {
                    return base.ConvertStringToValue(parameter, parameterType);
                }
                else
                {
                    object param = Newtonsoft.Json.JsonConvert.DeserializeObject(parameter, parameterType);
                    return param;
                }
            }

            public override string ConvertValueToString(object parameter, Type parameterType)
            {
                if (base.CanConvert(parameterType))
                {
                    return base.ConvertValueToString(parameter, parameterType);
                }
                else
                {
                    return Newtonsoft.Json.JsonConvert.SerializeObject(parameter);
                }
            }
        }

Это также устраняет необходимость отправки заголовков OPTIONS и данных POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...