8

私は次のブログ投稿の原則に従っており、Visual Studio 2010 の組み込み Web サーバーを使用して WCF サービスをデバッグすると、期待どおりの動作が得られます。

http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/

アプリケーションが FaultException() をスローすると、ローカル マシンでその障害の JSON 表現を確認できます。アプリケーションは、適切な HttpStatusCode (この場合は 401 Unauthorized) も返します。これは望ましい動作です。

{"Code":"UserNotLoggedInFault","DisplayText":"You must be logged in to access this resource.","InternalText":"User is not logged in"}

ただし、アプリケーションを IIS 7.0 に展開すると、正しい HttpStatusCode が返されますが、返される html はステータス コードに関連付けられた汎用テキストです。

このディレクトリまたはページを表示する権限がありません。

これはローカルで動作しているため、問題は IIS の構成設定にあると思います。エラー ステータスをインターセプトしていた IIS: Error Pages の値を既に削除しました (%SystemDrive%\inetpub\custerr\\401.htm から書式設定された HTML を返すために使用されていました)。

200 の範囲外の HTTP ステータスが返されたときに JSON 応答を通過させるために変更する必要がある IIS 設定を知っている人はいますか? ...または、他に何かする必要があるのでしょうか?


更新 #1

これは、アプリケーションが HttpStatusCode を Unauthorized (401) に設定する FaultException をスローした場合にのみ発生しているようです。アプリケーションが 404 Not Found のステータス コードを返した場合、JSON は正しく返されています。

問題はまだ残っていますが、401 Unauthorized ステータス コードを返す場合にのみ適用されると思います。

Charles Web Proxy によってキャプチャされたレスポンスのスクリーンショットを次に示します。

http://imgur.com/a/MkRRI

ローカルマシンにアクセスすると、次のようになります

http://imgur.com/a/RMmsa


更新 #2

そのため、リモートデスクトップでサーバーに接続し、localhost 経由でサイトにアクセスした場合、これは発生しません。認証が必要な URL にアクセスすると、適切な JSON オブジェクトが返されます。

http://i.imgur.com/J5oNn.png

これは、IIS が 401 ステータス コードを別の方法で処理し、認証されていないユーザーが適切な応答から保護されていることを意味するのでしょうか?

4

2 に答える 2

10

IIS の「エラー ページ」構成に、その動作を修正する設定が見つかりました。

エラー応答を「詳細エラー」に設定する必要があります。デフォルトは「ローカル リクエストの詳細エラーとリモート リクエストのカスタム エラー ページ」です。Web サイトまたはサーバー全体で設定できます。

この機能は、許可されていないクライアントに詳細を提供する代わりに、401 のカスタム エラー ページを表示することを決定したようです。

サービスのエラー処理が例外を保護していることを確認してください。そうしないと、クライアントがスタックトレースを見ることができます。

于 2012-11-08T21:26:13.270 に答える
-1

「権限がありません」というメッセージがブラウザによって生成されています。リクエストに対するレスポンスをブラウザで表示していると思います。IEだと思います。

IE は、401 応答が与えられた場合に、その「わかりやすい」ページを生成しています。IE は json クライアントではなく、呼び出し元が人間であると見なします (ほとんどの場合正しい)。つまり、人に優しいページを表示しています。

Fiddler、wget.exe、またはその他のブラウザー以外のツールを使用してその URL をくすぐると、401 ステータス コードと json 応答を含む正しい出力が表示されます。

他のブラウザではどうなるかわかりません。

無効にする方法など、IE の「わかりやすい」エラー ページの詳細については、Eric Lawrence (Fiddler の作成者) によるこの記事を参照してください。

于 2012-06-14T20:40:03.457 に答える