使Web服务字段的输入是可选的,而不是必需的

本文关键字:字段 Web 输入 服务 | 更新日期: 2023-09-27 17:54:49

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

  1. 我不想要求用户输入新日期和续订日期,我想让其中一个是必需的,而另一个是可选的
  2. 如果两个日期,新的和更新,输入然后用户将得到它全部在一个JSON中,但我不确定如何将两个列表附加在一起。

请让我知道如果你需要更多的信息,这是我的代码为webservice

    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当我在函数中声明可空参数时,我不再能够测试webservice,我得到"测试

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)

使Web服务字段的输入是可选的,而不是必需的

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

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

并使用NewServiceDate。

  1. 使用可空的DateTime

getserviceinformation方法签名:getserviceinformation (string name, string userId, DateTime?)DateTime, newServiceDate吗?DateTime, newServicesTo吗?DateTime, renewServiceDate吗?renewServiceTo)

  • 检查哪些日期有值;
  • 如果(newServiceDate.HasValue)……