2012-10-25 31 views
10

基本認証を使用するServiceStack APIを構築しています。私は現在、次のように私のAPPHOSTで認証を設定している:なしAuthorizationヘッダーまたは間違ったユーザ名で要求を行うときServiceStack認証に失敗した場合、リダイレクトしないでください。

var authDb = new OrmLiteConnectionFactory("Server=(...);", true, MySqlDialectProvider.Instance); 

var authRepo = new OrmLiteAuthRepository(authDb); 
authRepo.CreateMissingTables(); 
container.Register<ICacheClient>(c => new MemoryCacheClient()); 
container.Register<IUserAuthRepository>(c => authRepo); 

Plugins.Add(
    new AuthFeature(() => new AuthUserSession(), new IAuthProvider[] { new BasicAuthProvider() }) 
); 

+応答を渡す/Account/Login.aspx?ReturnUrl=にリダイレクトされます...

Parital要求+応答例:

POST http://localhost:60278/reserve HTTP/1.1 

HTTP/1.1 302 Found 
Location: /Account/Login.aspx?ReturnUrl=%2freserve 
X-Powered-By: ServiceStack/3,924 Win32NT/.NET 

それは401権限またはHTTP 403禁止のみHTTPで応答する方法はありますか?

答えて

22

デフォルトでは、ServiceStackのAuthFeatureは Content-Typeリクエストのデフォルト~/loginパスにリダイレクトしようとします。あなたはnullにAuthFeatureにリダイレクトパスを設定することでこれをオーバーライドすることができます。これは、他のコンテンツタイプを取得することを標準401 UnAuthorized応答にフォールバックします

Plugins.Add(new AuthFeature(...) { HtmlRedirect = null }); 

グローバルnullにHtmlRedirectを設定した後、あなたは例えば、アドホックベースで戻ってそれを追加することができます。

[Authenticate(HtmlRedirect="~/path/to/redirect/to")] 
+0

が、私はここに私を混乱させ、いくつかのASP.netのものがなければならないと思います。私はドキュメントでそれを見て、HtmlRedirect = nullを試して、私はAccept/Content-typeヘッダにapplication/jsonを使っています。リダイレクトは書き込み(〜/ login)と同じではなく、/ Account/Login.aspxです。私は私のglobal.aspxを通過して、あなたに知らせてくれるでしょう。 私はあなたの答えを今受け入れていますが、それはSSが正しくセットアップされたときの解決策です。ありがとうございました! :) – Magge

+0

はい、これは私の悪かったです。私はまだWeb.configに.net Membershipのものを持っていて、SS認証を上書きしているようです。私はそれを削除した後、魅力のように動作します。 – Magge

+0

私はそれを得ました! ... :) –

関連する問題