質問

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はバックスラッシュのurlencode形式です)次のエラーが表示されます:

Server error in '/' Application
HTTP Error 400 - Bad Request

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

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

役に立ちましたか?

解決

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

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

ユーザー名をドメイン名とユーザー名に分けて、通常のパス区切り文字「/」を使用することもできます。私はこれにあなたが確かにそれを行う方法であるかどうかを知るのに十分ではありませんが、これは私の最善の推測でしょう。

[OperationContract]
[WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
IRestResponse GetProfile(String domainName, String username);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top