[英]How can I get around ASMX's input validation
我正在使用C#asmx創建Web服務。 我想在每個Web方法中執行自己的輸入驗證。 在編寫代碼時,我意識到asmx本身會在輸入到達Web方法之前驗證輸入,因此使我自己無法執行驗證。 讓我告訴你我的意思。
說我有一個這樣的網絡方法:
[WebMethod]
public string method(int param1)
{
Validate(param1)
}
如果調用method
的人傳遞了 for param1
,那么asmx本身將引發異常,然后我才能進行自己的驗證。 (因為a不是int
類型,所以拋出異常。)
現在,我可以將param1
為字符串,然后根據asmx的驗證,用戶放入param1
任何內容都將是有效的。 但這是不可取的,因為我不會在這里討論。
有沒有一種方法可以在不使所有類型為string
的參數的情況下實現我要實現的目標? 如果沒有,那不是世界的盡頭,因為我可以使之工作,但我想知道是否有辦法。
PS,我知道asmx已過時,但是我的公司告訴我使用它。
編輯:我會說一件事,以幫助您解決我的問題。 我希望我的Web服務在所有情況下都返回具有特定結構的json字符串,即使輸入無效。 如果輸入無效,則應返回一個json字符串說明問題。 但在輸入無效的情況下,我無法執行此操作,因為asmx在請求到達我的Web方法之前引發了異常。
我了解為什么asmx是舊版。 它不能讓您控制輸入驗證的事實是荒謬的。
我想到了。
您需要創建一個類,該類根據字符串定義輸入。 然后,使此類成為Web方法的輸入參數的類型。 ASMX將反序列化輸入到類的實例中。 這樣做有很多好處,原因如下:
在這里定義我的輸入:
public abstract class Input
{
}
public class CreatePendingOrderInput : Input
{
public string customerNo;
public string callingCountry;
}
}
現在,只需將其與網絡方法聯系起來即可:
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string CreatePendingOrder(CreatePendingOrderInput input)
{
return JsonConvert.SerializeObject((IVRProcesses.Process<CreatePendingOrderOutput>(IVRProcesses.CreatePendingOrder, input)));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.