2017-07-04 7 views
2

でHTMLを返す無効な資格情報は、私はスローカスタム認証プロバイダーを持ってHttpError資格情報はとても似無効な場合:私はわざわざRESTを介してこのサービスにアクセスするときServicestackのSOAP - 私のサービスには対応し

throw HttpError.Unauthorized("Invalid Username or Password"); 

無効な資格情報を入力し、私が期待される応答を取得:

{ 
    "ResponseStatus": { 
    "ErrorCode": "Unauthorized", 
    "Message": "Invalid UserName or Password", 
    } 
} 

はしかし、SOAPクライアントを経由して同じことをやって、私はIISサーバーからHTML応答を得る:

enter image description here

これは、応答を逆シリアル化できないため、SOAPクライアントが中断する原因となります。これは、間違ったデータ値がリクエストに含まれている場合にも発生します。整数パラメータに文字列値を設定します。要求が処理されているサービス(HttpError.NotFoundがスローされている)で例外が発生した場合、応答は正常です。私は同様の質問がhereと回答されていることを知っていますが、2013年以降に更新されていません。レスポンスを設定する方法はありますか?

編集が1

私はそう見えるように私のweb.configファイルを更新しました(system.webServerで、私が代わりに "のHttpModules" の "モジュール" を使用していた。):

<system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <httpModules> 
     <add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" /> 
    </httpModules> 
    <httpHandlers> 
     <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" /> 
    </httpHandlers> 
    </system.web> 
    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" /> 
    </modules> 
    <urlCompression doStaticCompression="true" doDynamicCompression="false" /> 
    <handlers> 
     <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" /> 
    </handlers> 
    </system.webServer> 

と私のAPPHOSTには、以下があります。

SetConfig(new HostConfig 
{ 
    HandlerFactoryPath = "/api" 
}); 

SuppressFormsAuthenticationRedirectModule.PathToSupress = Config.HandlerFactoryPath; 

は、しかし、私はまだ前と同じエラーを取得しています。私はこれが、最初に具体的に認証するのではなく、すべての要求のヘッダーとして資格情報を渡しているのかどうか疑問に思っていますか?この同じエラーは、例えば次のような場合に発生することを指摘する価値がある。文字列は整数パラメータに設定されます。このソリューションは、実際の作業ではありません

編集2

。私は間違ったHandlerFactoryPathを定義した

SetConfig(new HostConfig 
{ 
    HandlerFactoryPath = "api" 
}); 
+0

(私たちは、サービスコールを実装する方法に基づいて)1つの提案です:あなたは、例えば '新しいHttpResponseMessageを返す() { コンテンツは=新しいStringContent(結果)のために、を送りたい「正確な」応答を構築StatusCode = HttpStatusCode.InternalServerError }; ' このようにして、出力を完全に制御できます。 – Subbu

+0

@Subbuこの問題は、間違ったデータ値がリクエストに含まれている場合にも発生する可能性があります。整数パラメータに文字列値を設定します。このような状況では、サービス・スタックが生成する応答を制御することはできません。私はこれを含めるために私の質問を編集しました。 –

答えて

3

死の黄色の画面は、ASP.NETのハイジャック不正なエラー応答のエラー応答の結果です。 prevent ASP.NET from hijacking the Error ResponseにはSuppressFormsAuthenticationRedirectModuleと入力できます。

まず、あなたがあなたのweb.configファイル内のHTTPモジュールを登録する必要があります。

<system.web> 
    <httpModules> 
     <add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" /> 
    </httpModules> 
</system.web> 

<!-- Required for IIS 7.0 (and above?) --> 
<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <httpModules> 
     <add name="FormsAuthenticationDisposition" type="ServiceStack.SuppressFormsAuthenticationRedirectModule, ServiceStack" /> 
    </httpModules> 
</system.webServer> 

、あなたのAPIが住んでいる場所でモジュールを構成する -/APIデフォルト、あなたのAPPHOST設定でよう:

public override void Configure(Funq.Container container) 
{ 
    SetConfig(new HostConfig { 
     HandlerFactoryPath = "api", 
    }); 

    //this is the configuration for Hijacking prevention 
    SuppressFormsAuthenticationRedirectModule.PathToSupress = Config.HandlerFactoryPath; 
} 
+0

お返事ありがとうございます。私はこれを試しましたが、違いはありません。私は各要求の一部として事前認証しようとしているため、これが問題なのかどうか疑問に思っています。私は上記の私の質問を編集します。 –

+0

@Dan_Dan_Man ServiceStack AuthはASP.NET Authから完全に切り離されているため、ASP.NETは認証しようとしていることを「認識」していないため、401 Unauthorizedを返す以外に、ハイジャックするようにプログラムされています。HandlerFactoryPathを "apiそれは違いがあるかどうかを確認する? – mythz

+0

ああ、それはあなたに感謝しました!誤った資格情報を入力すると、401の応答が正しく表示されるようになりました。私はあなたの答えを受け入れるだろうが、私はあなたが整数パラメータに文字列を入力するなどの状況を処理する方法を知っているのだろうか?私はその状況でもhtml応答を返す。 –

関連する問題