默認情況下,我使用ASP .NET MVC和授權系統編寫了一個Web應用程序。我配置了IdentityRole並通過外部提供者進行輸入。使用當前數據庫,我創建了我的數據上下文。現在我想寫一個Xamarin.Android應用程序並連接到我的數據庫,我想要一個簡單的API。但是,您想要訪問此API的功能僅適用於具有特定角色的用戶。該API非常簡單,因此不希望添加到WCF或WebAPI項目草案中。如何做到最好?使用角色的簡單ASP .NET MVC API控制器
回答
我想完成並完全回答此問題並關閉此主題。我一直在尋找如何爲移動客戶端添加連接到ASP.NET MVC上現有站點的能力。在我的搜索中,我遇到了一篇很棒的文章Justin Hyland on March 2, 2014 原則上,這篇文章中的所有內容都寫得很清楚,但我想爲清晰起見做一個小小的貢獻。 在安裝WebAPIConfig指出,需要
添加以下代碼到WebApiConfig註冊方法
但是,如果我們考慮的情況下ASP.NET MVC我們沒有這樣的文件。這一切都非常簡單,你只需要這樣一個文件來創建文件夾App_Start。該文件的內容可以完全保留在文章中。
爲了擺脫將不可避免地出現的錯誤,我們需要安裝兩個nuget軟件包:Microsoft.AspNet.WebApi和Microsoft.AspNet.WebApi.Owin。
非常好!現在我們可以轉向獲取該標記的方法,然後將該標記添加到查詢中,我們可以通過屬性[Authorize]獲得所需的數據關閉。
一句小話。如果您需要訪問針對特定角色關閉的方法,那麼從文章的Authenticate方法應該添加幾行代碼。
identity.AddClaim(new Claim(ClaimTypes.Name, user));
添加一行::
identity.AddClaim(new Claim(ClaimTypes.Role, role));
哪裏角色,你可以得到以下,例如:行後立即
var userIdentity = UserManager.FindAsync(user, password).Result;
var role = RoleManager.FindById(userIdentity.Roles.First().RoleId).Name;
用戶名和密碼,你必須發送一個請求。
我也想舉一個代碼來發送請求和接收響應的例子。無需查找並立即開始編碼。
async Task<string> GetToken(string userName, string password)
{
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("user", userName),
new KeyValuePair<string, string> ("password", password)
}
);
using (var client = new HttpClient())
{
HttpResponseMessage response = await client.PostAsync(APP_PATH + "/Authenticate", content);
var result = await response.Content.ReadAsStringAsync();
return result;
}
}
async Task<string> GetUserInfo(string token)
{
using (var client = CreateClient(token))
{
var response = await client.GetAsync(APP_PATH + "/ValidateToken");
return await response.Content.ReadAsStringAsync();
}
}
HttpClient CreateClient(string accessToken = "")
{
var client = new HttpClient();
if (!string.IsNullOrWhiteSpace(accessToken))
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
}
return client;
}
所有隻需要以正確的順序調用適當的方法。我希望對某人有用。 P.S. 如果您在Visual Studio中創建一個新項目以獲得此功能,您只需要打勾:
首先,您不需要單獨的項目來使用Web Api;您可以在同一個項目中同時使用MVC和Web Api。對於像現場AJAX請求這樣的一個端點,只需創建返回JSON或XML的MVC操作就可以了,但如果你正在談論一個真正的API,即使它非常簡單,我也會說Web Api 。
使用[Authorize]
屬性,您可以保護您的Web Api操作與您的MVC操作非常相似。如果您需要按角色進行限制,則只需將角色傳遞給該角色即可。但是,這裏的巨大差異,特別是如果您正在提供移動應用程序,則需要將授權與請求一起傳遞。這通常通過使用Authorization
標頭和不記名令牌來完成。基本上,您需要設置一個端點來簽署用戶並返回令牌。然後,每個需要授權的後續請求都會在標頭中包含該令牌。
這就是WebAPI立即提供的「開箱即用」不記名令牌解決方案。但是,正如我所指出的,我不想僅僅爲此添加整個項目。我怎樣才能使這個功能不會膨脹我的決定? – starmucks
- 1. 簡單的asp控制器
- 2. ASP .NET Web API控制器測試
- 3. ASP .NET MVC保護控制器/動作
- 4. 使用ASP NET MVC的角度Cli
- 5. WEB API控制器與MVC控制器
- 6. 重用MVC控制器角色菜單項的顯示授權
- 7. 通FORMDATA從角到.NET MVC控制器
- 8. ASP .Net MVC 3:單元測試控制器動作
- 9. 角 - 簡單的控制器理解
- 10. 在MVC控制器中使用Web Api
- 11. 使用ASP .Net核心(非mvc)的角度2路由
- 12. AJAX + ASP MVC Ambigous控制器
- 13. .ASP MVC中,控制器
- 14. ASP .net單元測試控制器使用MOLES
- 15. ASP MVC http.post調用行動控制器角度不工作
- 16. Spring MVC簡單控制器示例
- 17. 使用Webmatrix.Data API或MVC控制器簡化數據庫訪問?
- 18. ASP .net MVC - 使用Javascript的警報
- 19. 確定用戶登錄後有多少個ASP .NET MVC角色?
- 20. asp mvc 2角色和成員資格
- 21. 不調用ASP MVC控制器
- 22. 在控制器的ASP NET MVC陣列到客戶端陣列
- 23. ASP .net MVC創建控制器之前的預處理請求
- 24. SSL和ASP .NET MVC
- 25. 無法使用Asp .Net中的ajax調用Web API控制器方法
- 26. ASP .NET MVC 5根據角色和/或狀態編輯表格
- 27. .NET MVC控制器異常
- 28. 何時使用API控制器與MVC控制器
- 29. 從Web API 2控制器內的ASP.NET .NET MVC Url.Action
- 30. ASP .NET MVC 5 - 使用子文件夾
您的問題太廣泛了,而且有點混亂。角色提供者是ASP.NET成員資格的概念,但你的問題被標記爲asp.net-identity,這是一個完全不同的認證系統。這是什麼? –
我的意思是asp.net的身份。我對錯誤的措辭表示歉意。 – starmucks