qua*_*els 40 url asp.net-mvc authorization action-filter actionfilterattribute
我正在编写一个授权过滤器属性,因为我无法弄清楚如何将当前url作为字符串获取,所以我可以将它作为参数传递给LogOn操作.目标是,如果用户成功登录,他们将被重定向到他们最初尝试访问的页面.
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?
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
如何从当前请求中获取完整的字符串Url?
rbo*_*man 69
尝试:
var url = filterContext.HttpContext.Request.Url;
Run Code Online (Sandbox Code Playgroud)
VJA*_*JAI 17
要获得完整,URL您可以按照建议尝试,@rboarman但通常RedirectUrl是相对URL,因此您必须尝试对象的RawUrl属性Request.
filterContext.HttpContext.Request.Url ===> http://somesite.com/admin/manage
filterContext.HttpContext.Request.RawUrl ====> /admin/manage
Run Code Online (Sandbox Code Playgroud)
编辑:修复了第二个例子
在我的特定情况下,我在UrlReferrerURL之后。
filterContext.HttpContext.Request.UrlReferrer
Run Code Online (Sandbox Code Playgroud)
通过这一操作,我可以将用户重定向到他尝试访问其无权访问的操作之前的页面。
这是 Google 上排名最高的结果,因此在 Asp.net Core 2.0 中,我是这样做的:
context.HttpContext.Request.Url();
Run Code Online (Sandbox Code Playgroud)
使用这个扩展方法:
/// <summary>
/// Returns the absolute url.
/// </summary>
public static string Url(this HttpRequest request)
{
return $"{request.Scheme}://{request.Host}{request.Path}{request.QueryString}";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25374 次 |
| 最近记录: |