3

Visual Studio を使用して、servicestack を使用して Web サービスを実装しました。vs デバッガーからサービスを実行すると問題なく動作します。XSP4 を使用して debian マシンにデプロイしようとしました。このサービスは、サービスが稼働中であることがわかるログを利用しています。サービスを開始するとログ ファイルが作成されますが、要求を実行しても機能しません。たとえば、ブラウザを使用して次のリクエストを行います。

http://127.0.0.1/Activity/5b1e5316-8ea5-4ba5-aaee-7f40151b80d3/Unit

しかし、ブラウザは次の場所にリダイレクトされています。

http://127.0.0.1/login.aspx?ReturnUrl=%2fActivity%2f5b1e5316-8ea5-4ba5-aaee-7f40151b80d3%2fUnit

Configure メソッドに追加するグローバル requestfilter を使用して、独自の認証を実装しました。なぜリクエストが login.aspx にリダイレクトされるのか、非常に混乱しています。また、ログ ファイルには次の内容が表示されます。

エラー 2013-01-10 00:07:53.2631 NotFoundHttpHandler 192.168.23.2 要求が見つかりません: /login.aspx?ReturnUrl=%2fActivity%2f5b1e5316-8ea5-4ba5-aaee-7f40151b80d3%2fUnit

この動作の原因は何ですか?グローバル フィルターを追加するコードは次のとおりです。

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
        {
            try
            {
                var userCreds = httpReq.GetBasicAuthUserAndPassword();

                if (userCreds == null)
                {
                    httpResp.ReturnAuthRequired();
                    return;
                }

                var userName = userCreds.Value.Key;
                var userPass = userCreds.Value.Value;

                if (!TryResolve<IAuthenticationProvider>().AuthenticateUser(userName, userPass))
                {
                    httpResp.ReturnAuthRequired();
                }

                return;
            }
            catch (Exception ex)
            {   
                log.Error(ex);
                throw new ApplicationException(ex.Message, ex);
            }
        });
4

2 に答える 2

2

以下のスニペットを使用して、ServiceStack.NET 経由で返そうとしている 401 をオーバーライドする .NET Forms 認証で問題を解決しました。すべての要求で、最初に、AJAX の場合はすぐに動作を抑制します。このフラグは、この目的のために MS によって作成されました。http://msdn.microsoft.com/en-us/library/system.web.httpresponse.suppressformsauthenticationredirect.aspx

検索時に表示される他の多くのソリューションでは、.NET 認証を無効にするよう指示されていることに注意してください。これは、ほとんどの場合、実現不可能です。このコードは、他の変更を加えなくても機能します。

protected void Application_BeginRequest()
{
    HttpRequestBase request = new HttpRequestWrapper(Context.Request);
    if (request.IsAjaxRequest())
    {
        Context.Response.SuppressFormsAuthenticationRedirect = true;
    }
}
于 2014-01-03T21:30:54.583 に答える