Имя пользователя публикации службы Wcf Restful с параметром

Я разработчик C# .Net. Сейчас я программирую службу покоя Wcf для связи мобильного с моим сервером. Но проблема с отправкой json-запроса с использованием метода публикации с параметром. После отправки запроса от клиента сервер отображает ошибку: 400 Bad Request...

Мой контракт на обслуживание:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json,
           RequestFormat = WebMessageFormat.Json, UriTemplate = "login", BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
string login(string username, string password);

И внедрить сервис:

public string login(string username, string password)
{
   string str = String.Empty;
   if (username == "admin" && password == "admin")
       str = "Success";
   else
       str = "Invalid";
   return str;
}

Изменить:

Мой хост:

public void Start()
        {
            Stop();

            //string strAdrHTTP = "http://localhost:" + HttpPort + "/WcfMobileService";
            string strAdrHTTP = "http://192.168.1.190:" + HttpPort + "/WcfMobileService";
            Uri[] adrbase = { new Uri(strAdrHTTP) };

            m_svcHost = new ServiceHost(typeof(TWcfMobileService), adrbase);
            WebServiceHost webServiceHost =
                new WebServiceHost(typeof(TWcfMobileService), adrbase);


            ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
            m_svcHost.Description.Behaviors.Add(mBehave);

            mBehave.HttpsGetEnabled = true;
            mBehave.HttpGetEnabled = true;

            WebHttpBinding webBinding = new WebHttpBinding();
            webServiceHost.AddServiceEndpoint(typeof(IWcfMobileServiceContract), webBinding, "rest");

            WebHttpBinding restBinding = new WebHttpBinding();

            ServiceEndpoint restSEP =
                m_svcHost.AddServiceEndpoint(typeof(IWcfMobileServiceContract),
                                               restBinding, "rest");
            restSEP.Behaviors.Add(new WebHttpBehavior());

            EndpointAddress myEndpointAdd = new EndpointAddress(new Uri(strAdrHTTP),
                EndpointIdentity.CreateDnsIdentity("localhost"));
            restSEP.Address = myEndpointAdd;


            m_svcHost.AddServiceEndpoint(typeof(IMetadataExchange),
                MetadataExchangeBindings.CreateMexHttpBinding(), "mex");

            ServiceDebugBehavior debug = new ServiceDebugBehavior();
            debug.IncludeExceptionDetailInFaults = true;

            m_svcHost.Open();
        }

person MohammadReza Hasanzadeh    schedule 06.09.2016    source источник
comment
удалить BodyStyle = WebMessageBodyStyle.WrappedRequest   -  person Amit Kumar Ghosh    schedule 06.09.2016
comment
@AmitKumarGhosh Не работает   -  person MohammadReza Hasanzadeh    schedule 06.09.2016


Ответы (1)


Это рабочий пример -

[OperationContract]
[WebInvoke(
        Method = "POST",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        UriTemplate = "login")]
string login(CompositeType request);

Где -

[DataContract]
public class CompositeType
{
    [DataMember]
    public string username { get; set; }
    [DataMember]
    public string password { get; set; }
}

Пример запроса -

{"request":{"username":"test","password":"test"}}

И это работает -

введите здесь описание изображения

person Amit Kumar Ghosh    schedule 06.09.2016
comment
спасибо за ответ, когда я использую этот образец, я получил неверный запрос (400) - person MohammadReza Hasanzadeh; 06.09.2016