Передать идентификатор электронной почты в качестве параметра в службе WCF restful

#wcf #web-services

#wcf #веб-сервисы

Вопрос:

Предположим, у меня есть веб-служба, которая принимает идентификатор электронной почты и пароль в качестве параметра в url. Я должен аутентифицировать пользователя по идентификатору электронной почты и паролю. using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.Text;using System.ServiceModel.Web;namespace WebApp.Services{[ServiceContract]public interface IService { [WebInvoke(Method = "GET", UriTemplate = "/authenticate/{emailId}/{password}", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)] [OperationContract] Boolean Authenticate(string emailId, string password); }}

мы вызываем веб-сервис, подобный этому :

http://localhost:14176/Services/Service.svc/Authenticate/sushant.bhatnagar@greatdevelopers.com/123

поскольку электронная почта содержит ‘.’, который не кодируется веб-браузером, поэтому функция веб-службы не вызывается.

Существует любое решение для передачи идентификатора электронной почты в URL, отличном от строки запроса.

Ответ №1:

Если бы вы могли использовать POST:

 [ServiceContract]
public interface IMyService
{
     [OperationContract]
     bool Authenticate(EmailCredential request);
}

[DataContract]
public class EmailCredential 
{
     [DataMember]
     public string EmailId {get; set;}

     [DataMember]
     public string Password {get; set;}
}
  

и вызовите службу, используя WebClient или WebHttpRequest с этим xml (теперь я не знаю, как выглядит json для этого so xml)

     <EmailCredential >
        <EmailId >sushant.bhatnagar@greatdevelopers.com</EmailId >
        <Password >123</Password >
    </EmailCredential >
  

Комментарии:

1. о, это еще один способ сделать это, но для этого есть любой альтернативный способ с запросом GET.

2. К сожалению, каждый запрос GET будет отклонен из-за проблемы, о которой вы упоминаете:/ Итак, я вижу, что единственным решением является POST.

3. Существует вариант, если вы отправляете идентификатор электронной почты в кодировке base 64, а в сервисной функции он декодируется.