如果我理解你的問題,你想的路線,只是只授權特定的路徑?
如果是這樣,你可以使用路由作爲的WebAPI 2
的一部分內WebAPIConfig.cs
您的API控制器中添加以下配置
public static void Register(HttpConfiguration config)
{
//Enable attribute routing
config.MapHttpAttributeRoutes();
//... additional configuraitons
}
然後情況下,你可以設定的路線獨立於違約並添加任何你需要的屬性:
[Route("apiname/authroizedLogin")]
[Authorize(Roles="admin")]
public void IHttpActionResult(string username, stringpassword)
{
try
{
dosomething...
return Ok(somecontext);
}
catch(exception e)
{
return BadResponse(e.message);
}
}
Here is a link with more information on routes in WebAPI 2
編輯
關於訪問角色。這取決於你的實現。我個人不喜歡使用global.asx,因爲它會更頻繁地創建數據庫請求。我需要更多關於您的實施的信息才能提出真正的建議。但是,這裏有幾個選項。如果您使用claims based authentication,則該角色可以是聲明的一部分,並將作爲http上下文/請求的一部分傳遞給API。如果你不使用的權利要求另一選擇是將生成一個FormsAuthenticaitonTicket這可以被加密,一旦用戶被認證爲一個cookie存儲
public long RoleId
{
get
{
var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
string id = identity.Claims.Where(c => c.Type == "http://myschema.com/app/claims/roleid")
.Select(c => c.Value).SingleOrDefault();
//return 0 if no claim is located
return (!String.IsNullOrEmpty(id)) ? Convert.ToInt32(id) : 0;
}
set
{
_userId = value;
}
}
:從這裏可以推導出身份。
我從來沒有見過/以這種方式思考,我的做法似乎更容易。但我仍然需要製作自己的角色映射,我不知道在哪裏@Landro – 2015-02-24 14:30:49
我已經添加了一些可能有所幫助的附加信息 – rlcrews 2015-02-24 15:47:10
非常感謝!是的,我正在看如何實現類似的東西,還有FormsAuthTicket! – 2015-02-24 15:49:47