【发布时间】:2019-12-21 03:08:29
【问题描述】:
我们一直在为客户开发 ASP.NET 网络服务。
对于本地测试,本地主机上的 ASP.NET 允许我们直接在 ASP.NET 提供的网页上输入字段值,可见于:
https://www.example.com/webservices/customer/webservice.asmx?op=PlaceOrder
<UserIDNumber>long</UserIDNumber>
<CustomerEmailAddress>string</CustomerEmailAddress>
<CustomerFirstName>string</CustomerFirstName>
<CustomerLastName>string</CustomerLastName>
我们有一些自定义字段验证。例如
如果 CustomerEmailAddress 不是有效的电子邮件地址语法(例如,没有“@”),我们将返回“不是有效的用户电子邮件地址”。
如果 CustomerEmailAddress = "",我们返回“输入 CustomerEmailAddress”。
如果 CustomerFirstName = "" 我们返回“输入用户 CustomerFirstName”。
如果用户在该字段中输入“hello”,ASP.NET 会抛出:
System.ArgumentException: Cannot convert hello to System.Int64.
Parameter name: type ---> System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt64(String value, NumberStyles options, NumberFormatInfo numfmt)
at System.String.System.IConvertible.ToInt64(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()
我们是否应该指定:
<UserIDNumber>string</UserIDNumber>
虽然在我们给客户的网络服务文档中说它需要一个长数字?
然后在代码中我们可以使用:
Val(strUserIDNumber)>=1
检查它是否是一个数字。如果不说:
“为 UserIDNumber 输入一个有效的数字。”
【问题讨论】:
-
你能分享一下验证的代码吗?
-
@ChetanRanpariya 目前类似于“If lngUserID>0 Then Return True Else Return False”。注意 lngUserIDNumber 是 Long。
-
If Long.TryParse(userInput, LongVariable) Then -
@Mary 是的,我认为谢谢。我真正的问题是,当 web 服务使用者在线看到 asmx 模式(而不是我们的文档)时,当他们看到它是一个字符串而不是一个长时,他们会感到困惑吗?那么这种事情的正常做法是什么?
标签: c# asp.net vb.net asp.net-web-api