マイログインアクションはもともと、このように見えた:asp.net MVCアプリケーションのログイン中にjavascriptを検出しています...このコードは大丈夫ですか?
return new RedirectResult(nameValueCollection["ReturnUrl"]);
をしかし、私はクライアントのJavaScriptのホーム・ページがロードされる前に有効になっているかどうかを知っていただきたいと思いますので、私はこれにそれを変更:
return View(new LogInViewModel { ReturnUrl = nameValueCollection["ReturnUrl"] });
そして、インスタントリダイレクトするのではなく、次のビューを送信します。
@model Obr.Web.Models.LogInViewModel
@{
Layout = null;
string noJSReturnUrl = Model.ReturnUrl + (Model.ReturnUrl.Contains("?") ? "&" : "?") + "noJS=true";
}
<!doctype html>
<html>
<head>
<title>Loggin in...</title>
<meta http-equiv="REFRESH" content="1;[email protected]">
<script type="text/javascript">
window.location = "@Model.ReturnUrl";
</script>
</head>
<body>
<noscript>
Loggin in...<br />
<a href="@noJSReturnUrl">Click here if you are not redirected promptly.</a>
</noscript>
</body>
</html>
アイデアがあるユーザーが持っていない場合、JavaScriptが有効になっていることを、彼らが見短い読み込みメッセージ、および1秒後にホームページが読み込まれます。 JavaScript がの場合、ページはすぐにリロードされます。将来、ビューポートなどの寸法をサーバーに投稿することもできます。
これは正常に動作しますか? window.locationコマンドの実行に1秒以上かかる場合は、メタリフレッシュによって中断されますか、またはリフレッシュがブロックされますか?私は後者を望んでいるので、私はそれらの非jsの人々のために遅延を増やす必要はありません。
私の新しいやり方は、リダイレクトのペイロードにわずかな重さを加えていますが、それは余分な往復ではありません。とにかくリダイレクトが発生しますが、そうではありませんか?
更新:私は非常に重要な点に言及しなかった。私は実際にログイン画面そのもの、それが投稿するページだけを制御するわけではありません。このコードは、外部認証メカニズムに依存する製品の一部です。
更新された答えをありがとう!私はこれでロールします。 – Chris