リクエストクエリ文字列を使用して、SignOnプロセスを通じて返信URLをすべて取得できます。
まず、あなたが部分的にあなたのサインオンをレンダリングするたびに戻るには、ページを指定します。
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="Microsoft.Web.Mvc"%>
<!-- Your Example/Page1 page -->
<% if (!User.IsAuthenticated) %>
<%= Html.RenderAction("SignOn", "Account", new { returnUrl = Request.Url.PathAndQuery }); %>
使用RenderAction現在のコンテキストがアカウントコントローラでない場合。この機能は現在MVCリリースにはないため、ASP.NET MVC's Future libraryをソリューションに含める必要があります。
次に、サインオンコントローラ:
public ActionResult SignOn(string returnUrl)
{
if (User.Identity.IsAuthenticated)
{
User user = userRepository.GetItem(u => u.aspnet_UserName == User.Identity.Name);
return !string.IsNullOrEmpty(returnUrl)
? Redirect(returnUrl)
: (ActionResult) RedirectToAction("Index", "Home");
}
return PartialView();
}
サインオン形式:
<% using (Html.BeginForm("SignOn", "Account", new { returnUrl = Request.QueryString["returnUrl"] },FormMethod.Post,new {@class="my_signOn_class"}))
{ %>
<!-- Form -->
<% } %>
最後に、フォームのPOSTを処理し、あなたのサインオンコントローラで、あなたが使用して 'にreturnurl' にユーザーを返すことができます。次のコード:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SignOn(FormCollection formCollection, string returnUrl)
{
if (BusinessRuleViolated(formCollection))
{
if(!string.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home");
}
// SignIn(...)
}