繁体   English   中英

将“ Web服务”字段中的输入设为可选

[英]Make input to Web Service field optional not required

我创建了一个示例Web服务,该服务将向用户询问一些信息,并以JSON形式返回所需的所有信息。 我这里有两个问题

  1. 我不想要求用户输入新日期和续约日期,我要这样做,所以只需要其中之一,而另一则是可选的
  2. 如果输入了两个日期(新的和续订的),那么用户将通过一个JSON获得全部日期,但是我不确定如何将两个列表都附加在一起。

如果您需要其他信息,请告诉我,这是我的Web服务代码

    namespace WebServiceTest
    {
        /// <summary>
        /// Summary description for WebServicePrueba
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
        // [System.Web.Script.Services.ScriptService]
        public class WebServicePrueba : System.Web.Services.WebService
        {
            private string User { get; set; }
            private string UserID { get; set; }
            private DateTime NewServiceDate { get; set; }
            private DateTime NewServicesTo { get; set; }
            private DateTime RenewServiceDate { get; set; }
            private DateTime RenewServiceTo { get; set; }

            [System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
            public string getSeviceInformation(string name, string userId, DateTime newServiceDate, DateTime newServicesTo, DateTime renewServiceDate, DateTime renewServiceTo)
            {
                User = name;
                UserID = userId;
                NewServiceDate = newServiceDate;
                NewServicesTo = newServicesTo;
                RenewServiceDate = renewServiceDate;
                RenewServiceTo = renewServiceTo;

                if (User == "prueba" && UserID == "prueba")
                {
                    if (renewServiceDate == DateTime.MinValue || renewServiceTo == DateTime.MinValue)
                    {
                        ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
                        return JsonConvert.SerializeObject(list);
                    }

                    else if (newServiceDate == DateTime.MinValue || newServicesTo == DateTime.MinValue)
                    {
                        ArrayList list = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
                        return JsonConvert.SerializeObject(list);
                    }

                    else
                    {
                        ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
                        ArrayList list2 = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
                        return JsonConvert.SerializeObject(list);
                    }

                }

                else if (User != "prueba" && UserID == "prueba")
                {
                    return "Please check your username";
                }

                else if (User == "prueba" && UserID != "prueba")
                {
                    return "Please check your UserID";
                }

                else
                {
                    return "Please check both your username and userID";
                }
            }

        }
    }

这是我在运行Web服务并且不输入日期之一时遇到的错误(即,我输入newServiceDatenewServicesTo但未输入renewServiceDaterenewServiceTo或使用其他方法

    System.ArgumentException: Cannot convert  to System.DateTime.
    Parameter name: type ---> System.FormatException: String was not recognized as a valid DateTime.
       at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
       at System.Convert.ToDateTime(String value, IFormatProvider provider)
       at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
       at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
       at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
       --- End of inner exception stack trace ---
       at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
       at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
       at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
       at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
       at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()

-----------------------------更新-------------------- ----

@Jianping Liu当我在函数中声明可为空的参数时,我不再能够测试Web服务,我得到`Test

该测试表单仅适用于将原始类型作为参数的方法。`这就是我声明的方式

 [System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
      public string getSeviceInformation(string name, string userId, DateTime? newServiceDate, DateTime? newServicesTo, DateTime? renewServiceDate, DateTime? renewServiceTo)

您可以为4 DateTime使用可为空的变量

private DateTime? NewServiceDate { get; set; }
private DateTime? NewServicesTo { get; set; }
private DateTime? RenewServiceDate { get; set; }
private DateTime? RenewServiceTo { get; set; }

并使用NewServiceDate.HasValue检查其中是否包含值。

  1. 使用可为空的DateTime

getSeviceInformation方法的签名:公共字符串getSeviceInformation(字符串名称,字符串userId,DateTime,newServiceDate,DateTime,newServicesTo,DateTime,renewServiceDate,DateTime,renewServiceTo)

  1. 检查什么日期有值;

if(newServiceDate.HasValue)....在这里做一些事情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM