2

aspx ページで属性 [WebMethod] を持つメソッドを使用しています。asp.net ajax は使用しませんが、jQuery を使用してこれらのメソッドを呼び出し、JSON でオブジェクトを返します。これはすべてうまくいきます。

次に、webMethod 内に認証チェックを追加しました。現在のユーザーが機能にアクセスできない場合は、呼び出し元の JavaScript に知らせる必要があります。

そのため、JavaScript の OnError コールバック関数で解析できる AccessViolationException 例外をスローしています。これも機能しますが、例外には完全な StackTrace が含まれており、呼び出し元のクライアントがこれを利用できるようにしたくありません。

WebMethod がビジネス オブジェクトを返したときに、「アクセスが拒否されました」をクライアントに返すために使用できる他の方法はありますか?

ASP.Net 3.5SP1 と jQuery 1.32 を使用しています

4

5 に答える 5

3

以下を追加することもできます。

customErrors mode="On"/

web.config では、これによりスタック トレースが切り取られ、例外メッセージのみが残ります。

于 2016-06-01T06:44:20.630 に答える
2

エラーがワイヤを介して伝播するのはなぜですか? なぜエラー応答を使用しないのですか?

ステータスのエラーコードとユーザーに表示するエラーメッセージを含めることができる応答オブジェクトでオブジェクトをラップするだけです。

于 2009-04-21T16:51:02.837 に答える
1

NunFur が提案したように、アプローチを変更し、エラーをスローするのではなく、「よりリッチな」オブジェクトを返します。

少なくとも 2 つのオプションがあります。最初のオプションは、ビジネス オブジェクトをいくつかのステータス プロパティを持つ応答オブジェクトにカプセル化することです。これを試しましたが、JSON がより複雑になります。そこで、新しいオブジェクトを追加するのではなく、ServiceStatus と ServiceMessage のような 2 つのプロパティをビジネス オブジェクトに追加しました。デフォルトでは、これらは 200 と '' ですが、何か問題が発生した場合 (アクセスなし、適切なエラー)、WebMethod コードによって設定できます。この場合、ビジネス オブジェクトは「空」(データなし) になります。次に、JavaScript コードは最初に ServiceStatus をチェックし、適切に反応します。

単純な文字列であっても、WebMethods によって返されるすべてのオブジェクトに 2 つのフィールドを追加します。これらの 2 つのプロパティを持つインターフェイスを実装する必要があります。

これで、予期せぬ事態が発生した場合に備えて、回線を完全に制御できます。

入力していただきありがとうございます

于 2009-04-21T18:30:35.203 に答える
0

物事が本当にうまくいかないときのために例外を保存します。(例: データベースに接続できない)

何も返さない (null/nill/何でも) か、偽の bool 値を返します。

申し訳ありませんが、それ以上の答えはありません...自分自身を探し続ける必要があります。

于 2009-04-21T17:14:35.713 に答える
0

SoapException を見ることができます: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapexception(VS.71).aspx

JavaScriptから呼び出されたときに機能するかどうかはわかりません。特に get-request で呼び出された場合。

ところで AccessViolationException は、私の知る限り、アプリケーションがアクセスできないメモリにアクセスしているときにスローされることです。

/アスガー

于 2009-04-21T17:25:40.490 に答える