这个博客:
关于ASP.NET身份提供者状态:
持久控制
默认情况下,ASP.NET Identity系统会将所有用户信息存储在数据库中.ASP.NET Identity使用Entity Framework Code First来实现其所有持久性机制.
如果您的应用程序要求是此信息可能存储在不同的存储机制中,例如SharePoint,Azure表服务,无Sql数据库等,则现在可以插入不同的存储提供程序.
但是如何使用Azure表服务呢?我的研究表明你不能将实体框架与表服务一起使用,所以我认为你必须完全替换使用实体框架的代码,但我不确定.
相关问题:我是EF的新手.我们如何定制数据的存储方式(即使在SQL服务器中)?我发现了两个显示向用户表添加额外字段的示例:
http://www.asp.net/web-api/overview/security/external-authentication-services
但我不清楚究竟发生了什么.我认为它首先使用实体框架代码,但我看到很少有关于如何自定义EF为此存储数据的文档.例如,我可以重命名实体吗?我可以定义数据库的名称吗?
谢谢...
-ben
entity-framework azure azure-table-storage owin asp.net-identity
想象一下以下代码:
$.get( "ajax/getColorData.php", function( data ) {
this.colorData = data;
});
Run Code Online (Sandbox Code Playgroud)
现在设想'数据'的价值是:
this.colorData = [
{
colorName: 'Red',
colorIsInRainbow:true
},
{
colorName: 'Orange',
colorIsInRainbow: true
},
{
colorName: 'Magenta',
colorIsInRainbow: false
}
];
Run Code Online (Sandbox Code Playgroud)
问题1
现在,在我下载数据之后,假设我想为数组中的每个条目添加一个方法"colorStartsWithR".我"想"而不是在数组的每个成员上定义它,我可以在原型上以某种方式定义这个方法.但是,我不确定我能做到这一点,因为这些对象不是由我创建的,而是由$ .get返回的,所以我不清楚我是否正在思考正确的方向.
问题2
更进一步,如果我想为数组的每个成员添加一个属性,具体如下:
{
colorName: 'Magenta',
colorIsInRainbow: false,
userClickedThisColor:ko.observable()
}
Run Code Online (Sandbox Code Playgroud)
这样,我可以绑定(通过knockoutjs)列表并包含一个复选框.在这种情况下,我质疑原型是否会派上用场,因为每个成员都应该获得自己的ko.observable属性.一个快速的本能是做一些事情:
for (var i=0;i<this.colorData.length;i++)
{
this.colorData[i].userClickedThisColor=ko.observable()
}
Run Code Online (Sandbox Code Playgroud)
并且工作正常,但想象一下,有多种方法可以检索颜色列表,或者用户可以创建新的颜色实例,并且我在上面做的自定义更复杂.我现在需要复制上面的"附加"逻辑.有更聪明的方法吗?
我把大部分时间花在强类型语言上,有时这些事情对我来说并不那么明显.谢谢你的任何建议......
-ben
使用ASP.NET Web API和ASP.NET Identity 1.0,您可以使用此扩展方法来检索当前登录的用户:
var id = Microsoft.AspNet.Identity.IdentityExtensions.GetUserId(User.Identity);
Run Code Online (Sandbox Code Playgroud)
但是在ASP.NET identity 2.0 alpha中,您可以覆盖ID字段的类型.Microsoft提供的示例显示将此字段设置为int.但是这个扩展方法似乎是硬编码的,甚至在alpha中返回一个字符串:
在使用ASP.NET Identity 2.0 alpha时,如何从Web API控制器中检索当前登录用户的(int)标识?
我正在将我的ASP.NET Core应用程序升级到V3,并使用Visual Studio 2019进行开发/调试。除此之外,整个过程很顺利:
public void Configure(…..
app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
{
HotModuleReplacement = false,
ReactHotModuleReplacement = false
});
Run Code Online (Sandbox Code Playgroud)
UseWebpackDevMiddleware不再是:https : //github.com/aspnet/AspNetCore/issues/12890。
我现在希望了解每次调试时VS运行webpack的最佳方法,最好是仅在已更改的JS代码上运行。这就是我从中获得的价值UseWebpackDevMiddleware。我的应用程序是React应用程序,如果您的应用程序是从CreateReactApp启动的,那么似乎有一些新的替代品,但我的不是。(我相信以此为出发点但然后分开的应用程序称为“弹出”。)即使我的应用程序未使用CreateReactApp,我仍然可以以某种方式利用该功能吗?另外,在启动新的React应用程序之后,CreateReactApp的作用是什么?我以为它只会在一开始就被用于膨胀模板代码。
在所有这些中,Microsoft.AspNetCore.SpaServices.Extensions扮演什么角色?
我不需要热模块更换;我不需要服务器端预渲染。我实际上只是在尝试了解如何在调试过程中通过Webpack透明地构建JS。我可以将其连接到MSBuild吗?我想象其他人在升级时会面临同样的问题。
感谢您的任何建议。
我最近从 ASP.NET Core 2.2 升级。到 3.0。随着关于他们的元包的变化,我现在处于一切正常的状态,但没有明确引用一些非常重要的包。一切正常,因为它们被隐式引用。例如:
您可以看到我明确引用了 Microsoft.EntityFrameworkCore.SqlServer,但是我没有明确引用 Microsoft.EntityFrameworkCore。它仍然被拉进来,因为它似乎是一个间接引用。
我的问题是:这是一个合理的项目配置吗?明确地拉入 Microsoft.EntityFrameworkCore 有什么好处吗?我想可能会对版本升级产生影响。
谢谢...
最近的某个时候,Microsoft 开始在 ASP.NET Core React 模板(在 Identity Core 之上)中包含 IdentityServer 功能。我试图清楚地理解这种差异的含义。因此,我从附在此处的模板开始:
https://drive.google.com/file/d/1GV4UNhsPp_PdPk2RKjoz0490Vn9A6geY/view?usp=sharing
并做了一些事情:
- 搭建所有身份资产
-注释掉startup.cs中的以下几行:
(在配置服务中)
//services.AddIdentityServer()
// .AddApiAuthorization<ApplicationUser, ApplicationDbContext>();
services.AddAuthentication();
//.AddIdentityServerJwt();
Run Code Online (Sandbox Code Playgroud)
(在配置中)
//app.UseIdentityServer();
Run Code Online (Sandbox Code Playgroud)
在客户端,我删除了一些代码,并在 FetchData.js 中进行了此更改:
async populateWeatherData() {
//const token = await authService.getAccessToken();
const response = await fetch('weatherforecast', {
//headers: !token ? {} : { 'Authorization': `Bearer ${token}` },
credentials: 'same-origin',
});
const data = await response.json();
this.setState({ forecasts: data, loading: false });
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,登录后,我们将拥有一个包含登录信息的 cookie,并使用凭证:'same-origin' 导致将其发送到受保护的 API 端点。
这对我来说有效并且似乎很安全。去测试:
- 启动项目 - 导航到 /identity/account/login (这不会自动发生,因为我删除了其他客户端代码) …
asp.net-identity .net-core asp.net-core identityserver4 asp.net-core-identity
我正在使用VS2013 ASP.NET SPA模板作为我的Web应用程序的起点,它使用新的ASP.NET身份框架.这是来自模板:
public partial class Startup
{
static Startup()
{
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());
....
}
Run Code Online (Sandbox Code Playgroud)
因此,由于没有将DbContext传递到上面的UserStore构造函数,这表明正在创建一个新的DbContext.由于我也想利用数据上下文(对于请求期间的其他数据操作),我稍微更改了模板代码:
public partial class Startup
{
public static DerivedDbContext=null;
static Startup()
{
context = new DerivedDbContext();
UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(context));
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以通过以下方式从我的任何控制器使用相同的DbContext:
Startup.context
Run Code Online (Sandbox Code Playgroud)
但是,当多个请求同时进入时我遇到了麻烦,因为无关的操作发生在同一个DbContext中.从这里开始,我向我指出,我不应该在应用程序的整个生命周期中实例化单个DbContext,而只是为了特定请求的生命周期,所以我将实例化移动到控制器的构造函数,但现在,我在控制器中有自己的DbContext,而UserManager仍然有自己的(并且在Startup类中创建).
为什么模板为所有用户(在Startup类中)实例化了一次UserManager?值得关注的是,通过在控制器构造函数中创建自己的DbContext,有两个DbContexts(我在控制器的构造函数中创建的那个,以及在UserManager中创建的那个,在Startup类中创建的)同时播放?在所有请求中共享一个UserManager是否可以接受,但在一般情况下在所有请求中共享一个DbContext是不可接受的?
有两个单独的上下文似乎是愚蠢的,我注意到我有时会得到一个不同步的数据视图.我想了解是否有其他人在使用此模板时遇到此问题.
**编辑:我理解像nInject这样的IOC框架可能有助于在这种情况下管理对象生命周期,但我想首先了解如何在没有这种框架的帮助下实现这一目标.
谢谢... - 贝恩
entity-framework asp.net-web-api katana visual-studio-2013 asp.net-identity
我正在尝试结合 DropZoneJS(在此处找到)和 JavascriptLoadImage(在此处找到)来创建一个解决方案,用户可以在其中拖放文件进行上传,并根据图像中的 EXIF 元数据信息,它会旋转它(包括预览缩略图)(如有必要)。我认为提供了所有必要的部分:
DropZoneJS 提供了包含文件对象的“ addedfile”事件。连接该事件处理程序,然后我可以将其参数传递给 JavascriptLoadImage.parseMetaData 函数并正确读取存储的方向值:
var myDropZone = $("#my-awesome-dropzone").dropzone({ url: "/file/post" });
myDropZone[0].dropzone.on("addedfile", function (file) {
//Successfully loads the image, flips it and sticks the resulting HTML5 canvas in the DOM for display.
loadImage(file, function (img) {
document.body.appendChild(img);
},
{
orientation: 2,
canvas:true
}
);
loadImage.parseMetaData(file, function (data) {
if (!data.imageHead) {
return;
}
var orientation = data.exif.get('Orientation');
},
{
maxMetaDataSize: 262144,
disableImageHead: false
}
);
});
Run Code Online (Sandbox Code Playgroud)
我可以成功进行旋转,但我不确定是否使用生成的画布,并用生成的内容替换放置区“文件”对象。
注意:这与检测本地运行和Azure角色的问题不同,我理解已经回答了这个问题.
我有一个我部署到Azure的APS.NET MVC应用程序.我正在运行Azure工具的V2.5.我希望能够检测代码运行的以下三种情况中的哪一种:
本地(在IIS上调试),Azure网站或Azure Web角色
我在其他帖子中看到了使用以下内容的建议:
RoleEnvironment.IsAvailable
Run Code Online (Sandbox Code Playgroud)
然而,这对我的需求来说似乎是一个不完整的解决方案.它似乎检测代码是在本地运行还是作为Web角色运行没有问题.但是,它似乎没有涵盖检查作为天蓝色网站运行的情况.它不仅不包括这个,而且在Azure网站上运行时尝试检查该属性会使其爆炸:
mscorlib.dll中发生了'System.IO.FileLoadException'类型的第一次机会异常
Additional information: Could not load file or assembly
'Microsoft.WindowsAzure.ServiceRuntime, Version=2.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)
那么,谁能告诉我如何检测这三种情况?
我有两个单独的自定义对象列表.在这两个单独的列表中,两个列表之间可能存在一些相同的对象,但一个字段("id")除外.我想知道一种查询这两个列表的智能方法来找到这种重叠.我附上了一些代码来帮助澄清.任何建议,将不胜感激.
namespace ConsoleApplication1
{
class userObj
{
public int id;
public DateTime BirthDate;
public string FirstName;
public string LastName;
}
class Program
{
static void Main(string[] args)
{
List<userObj> list1 = new List<userObj>();
list1.Add(new userObj()
{
BirthDate=DateTime.Parse("1/1/2000"),
FirstName="John",
LastName="Smith",
id=0
});
list1.Add(new userObj()
{
BirthDate = DateTime.Parse("2/2/2000"),
FirstName = "Jane",
LastName = "Doe",
id = 1
});
list1.Add(new userObj()
{
BirthDate = DateTime.Parse("3/3/2000"),
FirstName = "Sam",
LastName = "Smith",
id = 2
});
List<userObj> list2 = new List<userObj>();
list2.Add(new userObj() …Run Code Online (Sandbox Code Playgroud) asp.net-core ×2
asp.net-mvc ×2
azure ×2
.net ×1
.net-core ×1
arrays ×1
c# ×1
canvas ×1
dropzone.js ×1
html5-canvas ×1
javascript ×1
katana ×1
linq ×1
msbuild ×1
nuget ×1
owin ×1
reactjs ×1
webpack ×1