2

WCFでRESTサービスを構築していますが、作成しているメソッドの1つはGetProfileです。これは、指定されたユーザー名のプロファイルを返します。ユーザー名にはユーザーのドメインが含まれるため、「DOMAIN\username」の形式になります。

したがって、私はProfiles.svcというサービスを持っています。このサービスには、次のエンドポイントが設定されています。

[OperationContract]
[WebGet(UriTemplate = "/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String username);

ただし、 http://server/profiles.svc/DOMAIN%5cusername (%5cはバックスラッシュのurlencoded形式)でサービスにアクセスしようとすると、次のエラーが発生します。

'/'アプリケーションのサーバーエラー
HTTPエラー400-不正なリクエスト

これは、GetProfileの実装で実際に定義されたコードがない場合でも発生するため、WCFがURIをメソッドにバインドしようとした時点でエラーがスローされていると思います。

REST WCFサービスのURLにバックスラッシュを追加できるようにするために、Webサービス構成に追加する必要のある設定はありますか?または、バックスラッシュは単に許可されていませんか?

4

1 に答える 1

5

URLのその部分では許可されていないのではないかと思います。エンコードされている限り、クエリ文字列で問題ありません。原則として、ファイル名で無効なURLのパス部分(つまり?)には何も入れません。

おそらく、別の文字を使用して、ユーザー名からドメインを削除することができます。

ユーザー名をドメイン名とユーザー名に分けて、通常のパスデリミネーター「/」を使用することもできます。私はこれがあなたが確かにそれを行う方法であるかどうかを知るのに十分なほどこれに精通していませんが、これは私の最良の推測です。

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
于 2008-10-14T16:31:00.337 に答える