我使用Visual Studio 2015创建了一个Asp.net Core 1.0(WebApi)项目。该模板是ASP.NET Core Web Application(.NET Core)\ WebApi(未选择身份验证)。
在ValuesController中,我想从正在调用该方法的客户端获取Windows标识。
var verts = new[]
{
new Tuple<int,int,int> (-1,-1,-1 ),
new Tuple<int,int,int> (1,-1,-1 ),
new Tuple<int,int,int> (1,1,-1 ),
new Tuple<int,int,int> (-1,1,-1 ),
new Tuple<int,int,int> (-1,-1,1 ),
new Tuple<int,int,int> (1,-1,1 ),
new Tuple<int,int,int> (1,1,1 ),
new Tuple<int,int,int> (-1,1,1 )
};
var edges = new[]
{
new Tuple<int,int>(0,1),
new Tuple<int,int>(2,2),
new Tuple<int,int>(2,3),
new Tuple<int,int>(3,0),
new Tuple<int,int>(4,5),
new Tuple<int,int>(5,6),
new Tuple<int,int>(6,7),
new Tuple<int,int>(7,4),
new Tuple<int,int>(0,4),
new Tuple<int,int>(1,5),
new Tuple<int,int>(2,6),
new Tuple<int,int>(3,7)
};
foreach(var edge in edges)
{
var edge1 = edge.Item1;
var edge2 = edge.Item2;
int x, y, z;//not sure why you need these?
foreach(var vert in new[] { verts[edge1].Item1, verts[edge1].Item2, verts[edge1].Item3 })
{
//[...]
}
}
目前在using System.Security.Claims;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Http;
...
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
[Route("GetIdentity")]
public string GetIdentity()
{
//method1
var userId = User.GetUserId();
//method2
var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
return userId;
}
}
和method1
中没有按预期返回结果。有什么想法吗?
答案 0 :(得分:3)
没有任何身份验证,任何Web框架都无法确定用户的身份。
选择项目模板"ASP.NET Core Application (.NET Core)\WebApi
&#34;并从&#34; No Authentication
&#34;更改身份验证您认为合适的任何身份验证,例如&#34; Windows Authentication
&#34;
然后,如果使用User
属性进行注释,则可以访问控制器的[Authorize]
成员。
[Authorize]
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
public string Get()
{
return User.Identity.Name;
}
}
如果您想拥有单独的用户帐户,请选择MVC模板(而不是WebAPI)。然后,您可以注册个人帐户并使用其凭据进行身份验证。
如果您是从未经身份验证的模板启动的,则可以在launchSettings.json
文件夹的Properties
中启用Windows身份验证。
{
"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
...
},
...
}