#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, а в сервисной функции он декодируется.