我想结束并完整回答这个问题并结束这个话题。我一直在寻找如何添加移动客户端连接到 ASP.NET MVC 上现有站点的功能。在我的搜索中,我发现了一篇很棒的文章Justin Hyland on March 2, 2014
原则上,本文中的所有内容都写得很好且清晰,但我想为清晰起见做出一点贡献。
Setup下WebAPIConfig声明需要
在WebApiConfig注册方法中添加如下代码
但是如果我们考虑 ASP.NET MVC 的情况,我们没有这样的文件。这一切都很简单,你只需要这样一个文件来创建文件夹 App_Start。文件内容可以保持原样。
为了消除不可避免出现的错误,我们需要安装两个 nuget 包:Microsoft.AspNet.WebApi 和 Microsoft.AspNet.WebApi.Owin。
太棒了!现在我们可以转到获取token的方法,然后将token添加到查询中,我们可以通过[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;
}
所有人只需要以正确的顺序调用适当的方法。我希望这对某人有用。
附言
如果您在 Visual Studio 中创建一个新项目来获得此功能,您只需勾选: