2011-01-14 8 views
2

私はASP.NET Webサービスを持っており、要求のフィールドのいくつかは列挙型として定義されています。空白または無効な値を入力する場合、応答が返ってくるよう:要求の解析中に例外をキャプチャする

Parameter name: type ---> System.ArgumentException: Must specify valid information for parsing in the string. 
    at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
    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() 

それは、このようなエラーをキャプチャし、代わりにXMLベースの応答を返すことは可能ですか?

答えて

-1

確かに、それは次のようになります。

try 
{ 
    Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
} 
catch (ArgumentException e) 
{ 
    //Serialise exception information from 'e' into XML 
    //(not shown here) and set it as the response 
    Response.Write(xmlMessage); 
    Response.End(); 
} 
+0

いいえ、この例外はWebサービスハンドラによってスローされ、ユーザの土地コードではありません。だからあなたはそれの周りにラッパーを置くことはできません。 –

+0

global.asaxでさえない? –

+1

いいえ、global.asaxのエラーハンドラにアタッチしても起動しません。 –

2

はありません、ASMX Webサービスでこれを行うための方法はありません。

当然、WCFでこれを行うことができます。

もちろん、クライアントが有効なデータを送信した方が良いでしょう。彼らがなぜそうでないのかを知りたいかもしれません。

関連する問題