IIS 7 Webサイトインスタンスで実行されているWCF RESTサービスを組み立てていて、トークンとHMACを挿入するHMAC認証スキームを使用しています。認証ヘッダー典型的なリクエストに応じて例のヘッダリストは、次のようになります。IISダンプ後続のスラッシュなしのWCFサービスコール後のリダイレクトでの承認ヘッダー
GET http://api.mydomain.com/Contacts HTTP/1.1
Authorization: 774F035C-FRTB-4207-DDDD-31BF1534AD96:9h0Whke9Bgi3XSHPo/YSXw==
Content-Type: application/xml; charset=utf-8
Host: api.mydomain.com
Connection: Keep-Alive
を私は.SVCファイルの代わりに使用してルーティングを設定するサービスを持っているので、私のGlobal.asaxのは、次のようになります。
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Add(new ServiceRoute("Users", new WebServiceHostFactory(), typeof(UsersService)));
RouteTable.Routes.Add(new ServiceRoute("Widgets", new WebServiceHostFactory(), typeof(WidgetsService)));
}
このようなルーティングでサービスを宣言すると、IISがWebGet
uri の後ろにスラッシュを付けないでのコールを受信すると、に307のリダイレクトが行われ、の末尾にスラッシュが付きます。役に立つと思いますが、ですが、問題はリダイレクトがAuthorizationヘッダーをダンプすることです。
私のサービスクラスはすべて正統派であり、他の点ではすごく優れています。 リダイレクトの際にAuthorizationヘッダーを保持できる方法はありますか?私は、ソリューションがIIS構成のものになると思っていますが、すべての種類のルーティングハッキングを適所に置いて、スラッシュのないバージョンを取得することができると思います。
更新:
が、私はこの動作を検証しますが、本当にすべての修正を与えるものではありませんthis articleを見つけました。
お返事ありがとうございます。あなたの最初の質問に答えるために、IISはリダイレクトの一部としてそれを再送しません。記事を見ると、オリジナルの投稿に追加されているように見えるのは、設計上のようだ - MSによると、承認は再び起こるはずだということだ。 –
ええ、まあまあ、私はそれを完全に理解していますが、それがあなたに何が起こっているのかはっきりしていません。だからもう一度もう一度やり直してみましょうか、クライアントですか、他のアプリケーションがこのサービスのクライアントを制御していませんか?最初は適切なURLをリクエストするだけの理由はありますか?あなたのサービスは末尾にスラッシュがないと定義されています。だから、それはあなたのクライアントが要求しているものです。議論は後続のスラッシュを許さなければならないが、技術的には、最終的には同じURLではないため、技術的には常に要求をリダイレクトすることは帯域幅の浪費である。 –
他のアプリは私のコントロールからクライアントになります。とにかくもっとRESTfulなので、実際には後続のスラッシュを必要とする問題はありませんが、エラーメッセージを401 Unauthorizedにしたくありません。私はむしろそれらのような404か何かをしたいと思う。残念ながら、私が指定した 'UriTemplate'にかかわらず、サービスルートの定義はそれを不可能にしているようです。 –