31

Authorizeフィルタ属性adnを作成しています。現在のURLを文字列として取得する方法を考え出すのに問題があります。そのため、LogOnアクションのパラメータとして渡すことができます。目標は、ユーザーが正常にログオンすると、元々アクセスしようとしていたページにリダイレクトされるということです。FilterAttribute内から現在のURLを取得するにはどうすればよいですか?

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を取得するにはどうすればよいですか?

答えて

59

試してみてください。

var url = filterContext.HttpContext.Request.Url; 
+6

また、RawUrl(filterContext.HttpContext.Request.RawUrl)を使用してドメインなしでURLを取得することもできます –

15

完全URLを取得するために、あなたは@rboarmanにより示唆されるように試みることができるが、通常RedirectUrl相対URLとなり、そのためにあなたがのRawUrlプロパティを試してみてRequestオブジェクトです。

filterContext.HttpContext.Request.Url ===> http://somesite.com/admin/manage 

filterContext.HttpContext.Request.RawUrl ====> /admin/manage 

が編集:私はUrlReferrer URLの後だった私の具体的なケースでは、第二の例に

+0

2番目の例で "RawUrl"を使用することを意味しましたか? –

+0

-1 'Url'の値を観測しても、絶対的ではなく相対的なものになります。 –

+0

@JoshNoeはい私は2番目の例でRawUrlを意味しました。私は今のところSOから少し離れており、あなたのコメントを見逃してしまった。 – VJAI

4

を修正しました。

filterContext.HttpContext.Request.UrlReferrer 

この1つでは、アクセス権のない操作にアクセスしようとする前のページにユーザーをリダイレクトできます。