2017-12-18 6 views
0

ユーザーがログインする必要があるASP.NET MVC5で作成されたアプリケーションで作業しています。認証は中央認証サービス(CAS)で機能します。私は、ユーザーのデータを更新するとき、私は、コントローラのアクションを呼び出す部分的なビューからユーザーをリダイレクトしようとするとCORSエラーが発生する

Home page with partial views

:ホームページで、私はいくつかの部分的な景色を眺めることができます。

CASセッションが期限切れになるまでうまくいきます。私は部分的なビューをリフレッシュしようとすると、私はエラーを取得:

「OPTIONSをhttps://example.com/CAS/Authentication 403(禁止)」

「ロードに失敗しましたhttps://example.com/CAS/Authentication:プリフライトの応答が無効なHTTPステータスコードを持っている403」

私はAjaxを使って部分ビューをリフレッシュし、同じドメインにないログインページを返すと思います。どうすればこの問題を克服できますか?

私のビューでは、私はコントローラにデータをAjax.BeginForm()で送信し、コントローラは部分的なビューを返すため、ページを完全に更新する必要はありません。

+0

妥当と思えます - ユーザーがログインしていない場合、ビューを要求することができないはずです。また、ログインページ全体がある場合は、ajax経由でリクエストできないようにする必要があります。他の操作を行うにはログインページにリダイレクトする必要があります。だから、その状況は理にかなっている。代わりにあなたが望む/期待していることは不明です。 – ADyson

+0

おそらく問題は他の場所です...ユーザーがログインしていないときは、ログインページに正しくリダイレ​​クトされます(ログインページが正しく返されます)。しかし、部分ビューになると、Ajaxを使用して部分ビューをリフレッシュするため、ログインページが部分ビューで直接返され、クロスオリジン要求エラーが発生します。 – Mnevis

+0

"ログインページは部分ビューで直接返されます"。これは、Ajaxがリダイレクトできないためです。 ajaxリクエストの場合、そのシナリオでは何らかのエラーを直接返す必要があります - おそらく403ページ。次に、クライアント側のスクリプトがリダイレクトを処理する必要があります。 – ADyson

答えて

0

Cross Origin Requestエラーを解決するには、Ajaxレスポンスを処理する必要がありました。私は、ログインページを部分ビューで返す代わりに、OnCompleteイベントでJavascript関数を呼び出して、レスポンスのステータスコードをチェックします。

私の部分図で

:クリックで

AjaxOptions ajaxOptions = new AjaxOptions 
{ 
    HttpMethod = "POST", 
    OnComplete = "redirectToLoginPage" 
}; 

using (Ajax.BeginForm("ActionName", "ControllerName", null, ajaxOptions)) 
{ 
    <button type="submit">Submit</button> 
} 

提出上、それはコントローラ「コントローラ名」からアクション「ACTIONNAME」を実行します。次に、Javascript関数 "redirectToLoginPage"を起動します。

function redirectToLoginPage(xhr) { 
    if (xhr.status == 200) { 
     //Whatever 
    } 
    else 
    { 
     window.location.replace("https://login.example/"); 
    } 
} 

これはトリックです。

関連する問題