我有一个内置在Asp.Net Core 2 MVC中的站点,它使用Core 2 Identity来保护它。在应用程序的某一点上,我正在尝试使用reactjs从一个简单的内部api中提取数据(但是当我使用普通的'JS JS时,问题就发生了,请注意)。
在核心前的日子里,我只是向我的控制器添加一个ActionResult方法,然后返回一个带有数据的JsonResult,而Bob则是你的叔叔。如果我需要它安全,我只是添加[授权]到所述方法,如果用户登录,javascript将启动就好了。没有大惊小怪,没有麻烦。
然而,现在,这似乎不再起作用了。每次我尝试连接到控制器(我甚至尝试使用API控制器)时,返回的数据是登录页面的HTML。这是奇怪的部分,如果我手动将浏览器指向它,它会返回必要的json,但是当我尝试通过javascript访问它时,它不会像过去那样进行身份验证。
是的,事情发生了变化。我明白了。问题是到目前为止我遇到的所有教程和技巧都围绕着保护一个需要它自己的特殊登录例程的独立API等等。我可以说,它不适用于我想要做的事情(除非我只是密集)。
所以我的问题最终是:如果将要使用api的唯一进程是站点内部并且用户已经登录到系统并且我不想重新进行,我该怎么办? - 验证他们以通过JavaScript连接?有没有办法从他们现有的登录中提取必要的令牌/ auth / info /,或者就此而言,当他们登录时生成它并在我需要时立即传递它?
谢谢!
编辑:不可否认,我不确定人们需要什么样的信息和代码,所以我一直在等待,直到我得到一些问题,以免混淆更多无用的信息(与原始的相对无用的信息相比)后)。话虽这么说,这是请求的代码。
fetch(invoiceServiceUrl)
.then(response => response.text())
.then(data => {
console.log(data);
});
[Authorize]
public IActionResult GetInvoices()
{
var testRecord = new List<InvoiceViewModel>
{
new InvoiceViewModel
{
Id = 1,
InvoiceAmount = "50.00",
InvoiceNumber = "12345WG",
InvoiceDate = "01/01/2018"
}
};
return Json(testRecord);
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>(o =>
{
o.Password.RequireUppercase = false;
o.Password.RequireNonAlphanumeric = false;
o.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromDays(100);
o.Lockout.MaxFailedAccessAttempts = 5;
o.Lockout.AllowedForNewUsers = true;
})
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
}