-1

*方案:*如何修改Web API的「Global.asax」來影響幫助頁面? (MVC)

我有在C#中的Visual Studio 2012 此Web服務利用Web API幫助頁面的默認項目的 「區域」 文件夾做了一個網頁API服務應用程序。

*問題:*

通過requeriment,我一定要實現手動輸入authenthicate和授權,可以讀取網頁API幫助頁面的用戶。但不是在Web服務中。

到目前爲止好,我做了一個帳戶控制,從數據庫日誌中的程序,得到的角色,等等等等
但現在,我努力實現是怎麼寫的Application_PostAuthenticateRequest過程在global.asax中,因爲我唯一的global.asax來自主項目,Web API幫助頁面沒有他自己的。

* QUESTION *
我怎麼能寫Application_PostAuthenticateRequest方法,而不會影響主服務,以便使用授權的網絡API幫助頁面中的屬性ONLY

感謝和親切的問候,

回答

1

如果我理解你的問題,你想的路線,只是只授權特定的路徑?

如果是這樣,你可以使用路由作爲的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; 
     } 
    } 

:從這裏可以推導出身份。

+0

我從來沒有見過/以這種方式思考,我的做法似乎更容易。但我仍然需要製作自己的角色映射,我不知道在哪裏@Landro – 2015-02-24 14:30:49

+0

我已經添加了一些可能有所幫助的附加信息 – rlcrews 2015-02-24 15:47:10

+0

非常感謝!是的,我正在看如何實現類似的東西,還有FormsAuthTicket! – 2015-02-24 15:49:47

相關問題