2010-02-17 66 views
0

提供訪問CONTROLER我有一些controlers,只有到處於Admin角色的用戶提供訪問:如何通過特殊的代碼鏈接

[Authorize(Roles = "Administrators")] 

CONTROLER IM談論顯示器公司的詳細信息的客戶,我想

www.mysite.com/Company/123?code=0932840329809u0932840

發電機密封:一些網址,例如提供訪問該CONTROLER ing代碼不會是一個問題,問題是什麼是最好的解決方案,通過這個祕密url訪問控制器,並且只有管理員沒有祕密url才能訪問? thnx!

回答

1

您可以通過擴展AuthorizeAttribute來創建自定義屬性過濾器。

喜歡的東西:

public class CustomAuthorizeAttribute : AuthorizeAttribute { 

    public string Code { get; set; } 

    protected override bool AuthorizeCore(HttpContextBase httpContext) { 
    if (base.AuthorizeCore(httpContext)) { 
     return true; 
    } 

    string code = Code ?? GetCode() //parse you code as a parameter or get it from another method 
    if (httpContext.Request["code"] == code) { 
     return true; 
    } 

    return false; 
    } 

} 


//I wouldn't recommend parsing the code like this, I would get it in your action filter 
[CustomAuthorizeAttribute(Code="0932840329809u0932840")] 
public ActionResult Index() { 
    return View(); 
} 

看一看http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

+0

,有沒有辦法在這個CustomAuthorizeAttribute類獲取路線數據?我無法在httpContext中找到路由數據... – Jack 2010-03-01 21:02:21

+0

可以通過httpContext.Request對象獲取路由數據,以便獲取www.mysite.com/Company/123?code=0932840329809u0932840的查詢字符串值,您可以使用httpContext。的Request.QueryString [ 「代碼」] – 2010-03-03 12:10:42