現在のURLを文字列として取得してパラメーターとしてLogOnアクションに渡す方法を見つけるのに問題があるため、Authorizeフィルター属性を作成しています。目標は、ユーザーが正常にログオンすると、最初にアクセスしようとしていたページにリダイレクトされることです。
public override void OnAuthorization(AuthorizeContext filterContext)
{
base.OnAuthorization(filterContext);
... my auth code ...
bool isAuth ;
... my auth code ...
if(!isAuth)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{ "Area", "" },
{ "Controller", "Account" },
{ "Action", "LogOn" },
{ "RedirectUrl", "/Url/String/For/Currnt/Request" } // how do I get this?
}
);
}
}
現在のリクエストから完全な文字列Urlを取得するにはどうすればよいですか?
試してください:
var url = filterContext.HttpContext.Request.Url;
完全なURL
を取得するには、@rboarman
ですが、通常RedirectUrl
は相対URLになります。そのためには、RawUrl
オブジェクトのRequest
プロパティを試す必要があります。
filterContext.HttpContext.Request.Url ===> http://somesite.com/admin/manage
filterContext.HttpContext.Request.RawUrl ====> /admin/manage
編集:2番目の例を修正
私の特定のケースでは、UrlReferrer
URLの後にいました。
filterContext.HttpContext.Request.UrlReferrer
これにより、ユーザーにアクセス許可のないアクションにアクセスしようとする前のページにユーザーをリダイレクトできました。
これはGoogleで最高ランクの結果であるため、Asp.net Core 2.0では次のようにしています。
context.HttpContext.Request.Url();
この拡張メソッドを使用して:
/// <summary>
/// Returns the absolute url.
/// </summary>
public static string Url(this HttpRequest request)
{
return $"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}";
}