带有参数的 Wcf Restful 服务发布用户名

Posted

技术标签:

【中文标题】带有参数的 Wcf Restful 服务发布用户名【英文标题】:Wcf Restful service post username with parameter 【发布时间】:2017-01-13 17:30:00 【问题描述】:

我是开发人员C# .Net 我现在编写一个 Wcf restful 服务 用于与我的服务器通信 mobile。但是使用带有参数的 post 方法 发送 json 请求 时出现问题。从客户端发送请求后,服务器显示错误: 400 错误请求...

我的服务合同

[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();
        

【问题讨论】:

删除BodyStyle = WebMessageBodyStyle.WrappedRequest @AmitKumarGhosh 不工作 【参考方案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"

而且它有效 -

【讨论】:

感谢您的回答,当我使用此示例时,我收到了错误请求 (400)

以上是关于带有参数的 Wcf Restful 服务发布用户名的主要内容,如果未能解决你的问题,请参考以下文章

带有 Restful API 和循环引用问题的 WCF 服务

具有多个参数的 WCF Restful API

无法将第二个参数传递给带有两个参数的 WCF 服务

如何使用用户名/密码 + SSL 使用 WCF 配置安全 RESTful 服务

WCF RESTful 服务:如何在 POST 请求中发送长字符串参数?

RESTful WCF 4 服务中移动客户端的用户身份验证