ASP.NET MVC 로그인 ReturnUrl이 항상 NULL입니까?
사이트에 다시 로그인하려고 할 때 ASP.NET MVC에서 폼 인증을 사용하여 쿼리에 ReturnUrl 변수를 넣습니다. 내 중단 작업 메서드는 "returnUrl"문자열을 허용합니다. 그러나 returnUrl 언어는 쿼리 언어에 명확하게 포함되어 있어도 항상 null 인 것입니다. 왜 그것이 사실이거나 가능한 수정 일 수 있는지에 대한 생각이 있습니까?
ReturnURL
로그인의 작업 속성에 매개 변수를 포함 하지 않아 해당 매개 변수없이 URL에 게시 할 수 양식?
이것은 하나의 일반 게시 양식을 사용하고 컨트롤러 및 ActionMethod를 명시 적으로 지정하는 경우에 발생하는 경향이 있습니다 (양식 게시를 유발하지만 쿼리는 게시 됨).
설치하기 위해 BeginForm에서 코드는 다음과 같이 표시되어야합니다.
Html.BeginForm("LogOn", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] })
편집 : RickAnd가 아래 주석에서 언급했던 것입니다. 그러나 익명 사용자를 허용하는 경우 사이트 깊숙한 곳에서 유치를 클릭 한 다음 이전에 페이지로 돌아가는 UI 패턴을 허용하지 않습니다. 일반적으로 요청되는 패턴입니다. LogOff에 대한 David Allen의 접근 방식은 LogOn의 경로 리디렉션에도 잘 작동합니다.
기본적으로 Asp.net MVC에는 몇 가지 숨겨진 기능이 있습니다. 예를 들어 변수 'id'를 컨트롤러 액션에 전달하면 'id'를 기본 식별자로 해석하고 포 슬래시를 사용하여 브라우저 쿼리에 넣습니다 .'id '대신 다른 이름을 사용하면'? '가 표시됩니다. 포 슬래시보다는. global.asax 파일의 RegisterRoutes
메소드에 'id'이름을 설정하기 때문입니다 .
이 문제에서는 다음 코드를 사용하여 컨트롤러에 대한 사용자 지정 데이터 전달합니다.
using(Html.BeginForm("LogOn", "Account", FormMethod.Post))
{
//form fields
}
따라서 Asp.net MVC는 컨트롤러 작업에 다른 유용한 데이터를 무시하고 returnUrl
항상 null
.
관리자 사용하면 Asp.net MVC가 작동하고
returnUrl
마운트됩니다.
using(Html.BeginForm())
{
//form fields in LogOn View
}
그건 그렇고, 우리가 사용자 지정 데이터 전달 튼 사용하여 작업을 제어 할 때 다음 과 같이 다른 데이터를 수동으로 전달해야합니다 .
using(Html.BeginForm("LogOn", "Account", new {ReturnUrl = Request.QueryString["ReturnUrl"] }))
{
//form fields
}
시나리오 및 로그 오프 시나리오를 처리하기 위해 생각할 수있는 두 가지 방법이 있습니다. Dave Beer는 위에서 한 가지 방법을 설명했습니다. 많은 상황에서 작동하는 또 다른 접근 방식이 있습니다. NerdDinner 튜토리얼을 코딩 할 때 사용했습니다. 이 튜토리얼은 로그 오프하고 집으로 데려가는 로그 오프 기능을 제공합니다. 나는 동의한다. 로그 오프하기 전에 미리 페이지로 돌아가고 싶었습니다. 그래서 계정 컨트롤러 로그 오프 작업을 다음과 같이 수정했습니다.
public ActionResult LogOff()
{
FormsService.SignOut();
return Redirect(Request.UrlReferrer.ToString());
}
이 동작을 재정의하려는 경우 더 멋지게 만들고 returnUrl을 전달하고 테스트 할 수 있습니다. 하지만 그게 필요하지 않습니다. 이것은 원하는 결과를 얻습니다. 작동도 작동하게 할 수 있습니다. MVC 프레임을 사용하여 작업을 수행 할 수있는 방법이있을 수 있습니다.
다음을 시도하십시오.
public static MvcForm BeginForm(this HtmlHelper htmlHelper, string id)
{
string formAction = htmlHelper.ViewContext.HttpContext.Request.RawUrl;
TagBuilder tagBuilder = new TagBuilder("form");
tagBuilder.MergeAttribute("id", id);
tagBuilder.MergeAttribute("action", formAction);
tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(FormMethod.Post), true);
HttpResponseBase httpResponse = htmlHelper.ViewContext.HttpContext.Response;
httpResponse.Write(tagBuilder.ToString(TagRenderMode.StartTag));
return new MvcForm(htmlHelper.ViewContext.HttpContext.Response);
}
먼저 web.config에서 로그인 URL을 설정했는지 확인한 다음 로그인 양식에 작업과 같은 항목이 포함되어 있지 않은지 확인합니다. 예를 들면 다음과 같습니다.
전망:
작업을 지정하면 반환 URL에 대해 항상 null이 표시됩니다.
제어 장치:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SignIn(string userName, string password, bool? rememberMe, string returnUrl)
{
}
참조 URL : https://stackoverflow.com/questions/827905/asp-net-mvc-login-returnurl-always-null
'ProgramingTip' 카테고리의 다른 글
Apache에서 .svn 폴더에 대한 거부 액세스 (0) | 2020.12.28 |
---|---|
쿼리를 사용하여 기존 테이블에 대한 SQL 작성 펼쳐 (0) | 2020.12.28 |
Maven에서 생성 된 jar에서 리소스를 제외하는 방법은 무엇입니까? (0) | 2020.12.28 |
byte []로 드로어 블 (0) | 2020.12.28 |
Java의 NoClassDefFoundError : com / google / common / base / Function (0) | 2020.12.28 |