【问题标题】:Make input to Web Service field optional not required将 Web 服务字段的输入设为可选不是必需的
【发布时间】:2015-06-10 13:41:06
【问题描述】:

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

  1. 我不想要求用户输入 bot 新日期和续订日期,我想只要求其中一个,而另一个是可选的
  2. 如果输入了新日期和续订日期,那么用户将在一个 JSON 中获得所有日期,但我不确定如何将两个列表附加在一起。

如果您需要更多信息,请告诉我,这是我的网络服务代码

    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 服务,我得到 `测试

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

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

【问题讨论】:

    标签: c# json web-services visual-studio-2010


    【解决方案1】:

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

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

    并使用 NewServiceDate.HasValue 来检查它是否包含一个值。

    【讨论】:

    • 我进行了更改,但仍然遇到相同的错误。需要如何输入 DateTime 的输入。我试过10/17/201310/17/20132013-10-172013-10-18。我还需要进行其他更改吗?因为当我运行服务而无需输入续订日期并且我使用2013-10-172013-10-18 时,服务就会运行。
    • @Tavo 您的函数中还需要可以为空的参数。 public string getServiceInformation(string name, string userId, DateTime?newServiceDate, DateTime?newServicesTo, DateTime?renewServiceDate, DateTime?renewServiceTo) 你的日期时间格式需要和你的服务器机器日期时间格式一样。否则,您可以将字符串传递给您的函数,然后在函数中将字符串转换为数据时间
    【解决方案2】:
    1. 使用可为空的日期时间

    getServiceInformation 方法的签名: public string getServiceInformation(string name, string userId, DateTime?newServiceDate, DateTime?newServicesTo, DateTime?renewServiceDate, DateTime?renewServiceTo)

    1. 检查哪些日期有值;

    if(newServiceDate.HasValue) .... 在这里做点什么

    【讨论】:

      猜你喜欢
      • 2016-09-30
      • 2014-04-01
      • 2013-02-10
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多